我在一个在指定类型上操作的方法中有一些逻辑,我想创建一个封装该逻辑的泛型lambda。这就是我想要做的事情的精神:
public void DoSomething()
{
// ...
Func<T> GetTypeName = () => T.GetType().Name;
GetTypeName<string>();
GetTypeName<DateTime>();
GetTypeName<int>();
// ...
}
我知道我可以将类型作为参数传递,或者创建一个泛型方法。但是我很想知道lambda是否可以定义自己的泛型参数。(所以我不是在寻找替代方案。)据我所知,C# 3.0不支持这一点。
发布于 2010-03-09 05:52:53
无法创建具有新泛型参数的lambda表达式。您可以在包含的方法或类型上重用泛型参数,但不能创建新的方法或类型。
发布于 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>();
// ...
}
发布于 2010-03-09 05:51:33
只有当您的DoSomething
方法是泛型的或者它的类是泛型的时,这才是可能的。
https://stackoverflow.com/questions/2404993
复制相似问题