C# 将函数分配给泛型委托

C# 将函数分配给泛型委托,c#,generics,delegates,assign,C#,Generics,Delegates,Assign,我有一个泛型类,我想在其中保存一个使用类型T作为参数和返回值的委托。如何将方法分配给属性getValueDefault private delegate TOut GetValueDefault<in TIn, TOut>(string key, TIn defaultValue); private GetValueDefault<T, T> getValueDefault = null; 私有委托TOut GetValueDefault(字符串键,TIn defau

我有一个泛型类,我想在其中保存一个使用类型T作为参数和返回值的委托。如何将方法分配给属性getValueDefault

private delegate TOut GetValueDefault<in TIn, TOut>(string key, TIn defaultValue);

private GetValueDefault<T, T> getValueDefault = null;
私有委托TOut GetValueDefault(字符串键,TIn defaultValue);
私有GetValueDefault GetValueDefault=null;

例如,带有签名的方法
bool ThirdPartyClass.foo(字符串键,bool defValue)

应该简单到:

private delegate TOut GetValueDefault<in TIn, TOut>(string key, TIn defaultValue);

private GetValueDefault<int, bool> getValueDefault = afoo;

static bool ThirdPartyClass.foo(string key, int defValue)
{
    \\...
}
私有委托TOut GetValueDefault(字符串键,TIn defaultValue);
私有GetValueDefault GetValueDefault=afoo;
静态bool ThirdPartyClass.foo(字符串键,int-defValue)
{
\\...
}
但是,如果在所有情况下,输入和输出类型参数都相等,则可以将其简化为:

private delegate T GetValueDefault<T>(string key, T defaultValue);

private static GetValueDefault<bool> getValueDefault = afoo;
private委托T GetValueDefault(字符串键,T defaultValue);
私有静态GetValueDefault GetValueDefault=afoo;

我认为你应该这样写:

class Sample<T>
{
    public delegate TOut GetValueDefault<in TIn, TOut>(string key, TIn defaultValue);

    private GetValueDefault<T, T> getValueDefault = null; 
    public Sample(GetValueDefault<T, T> del)
    {
        getValueDefault = del;
    }
}
类示例
{
公共委托TOut GetValueDefault(字符串键,TIn defaultValue);
私有GetValueDefault GetValueDefault=null;
公共样本(GetValueDefault del)
{
getValueDefault=del;
}
}

在本例中,作为
T
传递的泛型参数是什么?除非它是
object
,否则我认为这是不可能的,因为
string
bool
与任何其他类型都不兼容。这只适用于
bool
,如果
t
是其他类型,我想分配
(int)ThirdPartyClass.foo2(字符串键,int defaultValue)
在构造函数中。@MatthiasSchl我已经更新了我的答案,以便它与类型为
int