如何改变
public static List<T> CreateListOfAnonymous<T>(T unused) {return new List<T>();}
进入lamda。我似乎无法解决这个问题。作为泛型的通用给出错误
即:
Func<T,T> ..... fails because its looking for a real type.
我的目标是使用上述方法中的逻辑,但没有方法,只是在某个方法内部。
答案 0 :(得分:4)
如何将泛型方法转换为lambda?
你没有。 Lambdas不能是通用的。抱歉!这是名义和匿名函数之间的差异之一;匿名函数不能是通用的,名义函数可以。
您能解释一下需要通用匿名方法的场景吗?如果有充分的理由将其添加到语言中,我们可以将其视为假设的未来版本。
答案 1 :(得分:3)
我的目标是使用上述方法中的逻辑,但没有方法,只是在某个方法内部。
如果您使用lambda的方法或类型是通用的(因此您的类型具有上下文中的具体内容),那么您可以使其工作:
public void SomeMethod<T>()
{
Func<T, List<T>> createList = CreateListOfAnonymous;
var list = createList(default(T));
}
// ...
class SomeClass<T>
{
public void SomeMethod()
{
Func<T, List<T>> createList = CreateListOfAnonymous;
var list = createList(default(T));
}
}
如果您的代码都不正确,或者您希望将lambda的T
保留为开放式泛型(可能是方法或类的通用参数之外的其他类型),那么就不可能,as leppie mentioned。
我发现在过去我想要做这类事情的情况下(avoid repeating myself),我只想在方法中绑定一些类型。所以我只是咬紧牙关,为我想支持的每种类型创建了一个具体版本:
public void SomeMethod()
{
Func<List<string>> createStringList = () => CreateListOfAnonymous("");
Func<List<int>> createIntList = () => CreateListOfAnonymous(0);
var list1 = createStringList();
var list2 = createStringList();
var list3 = createStringList();
var list4 = createIntList();
var list5 = createIntList();
// ...
}
答案 2 :(得分:0)
如果我理解正确,那是不可能的。
您不能拥有开放泛型类型的实例。