从函数返回通用List

时间:2010-10-02 12:17:15

标签: c# generics

作为练习,我正在尝试创建一个函数,该函数从另一个传递给函数的泛型列表中返回一个通用列表。传入的列表可以是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'?我知道如果我将它设置为特定的返回类型(如字符串),该函数将起作用,但是我必须为我想要使用的每种类型创建一个单独的函数,这似乎不是很有效。

3 个答案:

答案 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是属性,而不是方法,因此请从中删除括号。