Visual Studio 2005:在C#中列出<T> .First()List <T> .Last()方法?

Nik*_*Nik 4 .net c# visual-studio-2005

List<T>.First()List<T>.Last()我的VS 2008 C#项目一样使用,但是当我降级到2005年时,我遇到了这样的错误:

'System.Collections.Generic.List'不包含'First'的定义

据我所知,如果仍有Find()FindLast()方法,那么必须有一种非常简单的方法来获取第一个和最后一个值的迭代器,我是对的吗?但我坚持这个,找不到任何有用的东西:(

Jon*_*eet 11

First()并且Last()是LINQ的一部分,这就是为什么它们在你的VS 2005项目中找不到的原因.

假设列表非空,如果你正在使用List<T>它真的容易找到第一个和最后一个值:

T first = list[0];
T last = list[list.Count-1];
Run Code Online (Sandbox Code Playgroud)

如果你真的需要使用迭代器,你可以很容易地实现LINQ方法:

public static T First<T>(IEnumerable<T> source)
{
    foreach (T element in source)
    {
        return element;
    }
    throw new InvalidOperationException("Empty list");
}

public static T Last<T>(IEnumerable<T> source)
{
    T last = default(T);
    bool gotAny = false;
    foreach (T element in source)
    {
        last = element;
        gotAny = true;
    }
    if (!gotAny)
    {
        throw new InvalidOperationException("Empty list");
    }
    return last;
}
Run Code Online (Sandbox Code Playgroud)

(我怀疑Last检查的真实实现是否sourceIList<T>,list[list.Count-1]如果是,则返回,以避免必须遍历整个集合.)

正如评论中指出的那样,这些不是扩展方法 - 你写的:

// Assuming the method is in a CollectionHelpers class.
Foo first = CollectionHelpers.First(list);
Run Code Online (Sandbox Code Playgroud)

代替

Foo first = list.First();
Run Code Online (Sandbox Code Playgroud)

但效果是一样的.