作为练习,我正在尝试创建一个函数,该函数从另一个传递给函数的泛型列表中返回一个通用列表。传入的列表可以是int或string,我想返回传入列表中具有偶数个字符的所有成员的列表。我正在做的方式是不正确的,它不编译,但我想知道为什么。 (我使用的是匿名方法,我知道可以用Lambda表达式替换,但我想首先知道为什么它不起作用。)
List<T> GetEvens(List<T> list)
{
List<T> newList =
list.FindAll(delegate(T t)
{return t.ToString().Length() % 2 == 0;});
return newList;
}
我在第3行和第4行收到错误,说“无法找到类型或命名空间名称'T'”。为什么功能不能识别'T'?我知道如果我将它设置为特定的返回类型(如字符串),该函数将起作用,但是我必须为我想要使用的每种类型创建一个单独的函数,这似乎不是很有效。
答案 0 :(得分:4)
尝试List<T> GetEvens<T>( ... )
答案 1 :(得分:0)
原因是没有长度方法。它是property所以你不需要括号:
return t.ToString().Length % 2 == 0;
但要让你的代码更短:
public List<T> GetEvens(List<T> list)
{
return list.FindAll(t => t.ToString().Length % 2 == 0);
}
答案 2 :(得分:0)
Length
是属性,而不是方法,因此请从中删除括号。