List <T> .FindAll的结果是否保证与原始列表的顺序相同?

Pau*_*ulB 6 c# lambda list

如果我有一个包含以下条目的列表:

苹果香蕉葡萄樱桃橙色猕猴桃

结果是

fruit.FindAll(f => f.Length == 6)
Run Code Online (Sandbox Code Playgroud)

保证永远

香蕉樱桃橙

或订单可能不同?

BFr*_*ree 7

从某种意义上来说它并不能保证它在文档中没有说明,但是如果你看一下它当前是如何实现的,那么是的,它总会以相同的顺序返回.

以下是它目前的实施方式:

public List<T> FindAll(Predicate<T> match)
{
    if (match == null)
    {
        ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match);
    }
    List<T> list = new List<T>();
    for (int i = 0; i < this._size; i++)
    {
        if (match(this._items[i]))
        {
            list.Add(this._items[i]);
        }
    }
    return list;
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它是一个简单的for循环,按顺序遍历列表,并添加匹配的项目.