可以定义一个通用的lambda吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (40)

我有一个在指定类型上运行的方法中的逻辑,我想创建一个封装逻辑的通用lambda。这是我想要做的事情的精神:

public void DoSomething()
{
    // ...

    Func<T> GetTypeName = () => T.GetType().Name;

    GetTypeName<string>();
    GetTypeName<DateTime>();
    GetTypeName<int>();

    // ...
}

我知道我可以通过类型作为参数或创建一个通用的方法,但我很感兴趣,如果它可以只是一个通用的lambda(所以我不寻找替代品)。从我可以告诉的C#3.0不支持这一点。

提问于
用户回答回答于

不可能创建具有新的通用参数的lambda表达式。你可以在包含的方法或类型上重新使用泛型参数,但不能创建新参数。

用户回答回答于

虽然你还不能(还有?)有一个通用的lambda,你可以得到相同的用法语法。如果你定义:

public static class TypeNameGetter
{
    public static string GetTypeName<T>()
    {
        return typeof( T ).Name;
    }
}

你可以使用它(虽然using static是C#6):

using static TypeNameGetter;
public class Test
{
    public void Test1()
    {
        var s1 = GetTypeName<int>();
        var s2 = GetTypeName<string>();
    }
}

扫码关注云+社区