.net 是否使用泛型类型参数创建匿名函数?
假设我有这个方法:.net 是否使用泛型类型参数创建匿名函数?,.net,generics,anonymous-methods,.net,Generics,Anonymous Methods,假设我有这个方法: int MyMethod(int arg) { return arg; } 我可以创建一个匿名的等价物,如下所示: Func<int, int> MyAnonMethod = (arg) => { return arg; }; T MyMethod<T>(T arg) { return arg; } Func MyAnonMethod=(arg)=> { 返回arg; }; 但假设我有一个方法,它使用以下泛型类型参
int MyMethod(int arg)
{
return arg;
}
我可以创建一个匿名的等价物,如下所示:
Func<int, int> MyAnonMethod = (arg) =>
{
return arg;
};
T MyMethod<T>(T arg)
{
return arg;
}
Func MyAnonMethod=(arg)=>
{
返回arg;
};
但假设我有一个方法,它使用以下泛型类型参数:
Func<int, int> MyAnonMethod = (arg) =>
{
return arg;
};
T MyMethod<T>(T arg)
{
return arg;
}
T MyMethod(T arg)
{
返回arg;
}
如何将其创建为匿名方法?泛型中的所有具体方法都是匿名的。你不能反过来 这样做很简单:
T MyMethod<T>(T arg)
{
return arg;
}
//...
Func<int, int> MyAnonMethod = MyMethod<int>;
MyAnonMethod(1); // returns 1
你可以用
Func<T, T> MyAnonMethod = (arg) =>
{
return arg;
};
你有两个选择:
T
T
在通用上下文中声明委托但这意味着我知道
T
,而我不知道。就像我在具体方法中不知道t
一样,我在匿名方法中也不知道t
。你是说在(arg)…
中你没有指定int
?这就是你要找的吗?没错。我需要能够通过任何类型的考试。调用匿名方法时,我希望intellisense工具提示显示T MyClass.MyMethod(T arg)
。一旦我以int I=MyMethod(1)
的形式完成表达式,我希望intellisense工具提示显示int MyClass.MyMethod(int arg)
。我不确定intellisense,但是MyMethod(1)
将同时接受并返回int
(注意,MyMethod
,而不是MyAnonMethod
int是隐式的).
var f = new Func<int, int>(MyMethod<int>);
var result = f(10);
T Test<T>()
{
T arg = default(T);
Func<T, T> func = MyMethod; // Generic delegate
return func(arg);
}
// Define other methods and classes here
T MyMethod<T>(T arg)
{
return arg;
}
void Test()
{
var fn = new Func<T, T>(MyMethod<T>);
fn(10); // returns 10
fn("Test"); // returns "Test"
}