.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"
    }