首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否可以在C#中定义泛型lambda?

是否可以在C#中定义泛型lambda?
EN

Stack Overflow用户
提问于 2010-03-09 05:45:06
回答 3查看 13.2K关注 0票数 25

我在一个在指定类型上操作的方法中有一些逻辑,我想创建一个封装该逻辑的泛型lambda。这就是我想要做的事情的精神:

public void DoSomething()
{
    // ...

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

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

    // ...
}

我知道我可以将类型作为参数传递,或者创建一个泛型方法。但是我很想知道lambda是否可以定义自己的泛型参数。(所以我不是在寻找替代方案。)据我所知,C# 3.0不支持这一点。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-09 05:52:53

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

票数 18
EN

Stack Overflow用户

发布于 2018-09-01 04:26:50

虽然Jared Parson的答案在历史上是正确的(2010!),但如果你搜索"generic lambda C#“,这个问题在谷歌中是第一个命中的。虽然lambdas没有语法来接受额外的泛型参数,但您现在可以使用本地(泛型)函数来实现相同的结果。当它们捕获上下文时,它们几乎就是您正在寻找的内容。

public void DoSomething()
{
    // ...

    string GetTypeName<T>() => typeof(T).GetType().Name;

    string nameOfString = GetTypeName<string>();
    string nameOfDT = GetTypeName<DateTime>();
    string nameOfInt = GetTypeName<int>();

    // ...
}
票数 24
EN

Stack Overflow用户

发布于 2010-03-09 05:51:33

只有当您的DoSomething方法是泛型的或者它的类是泛型的时,这才是可能的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2404993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档