检查和检索集合的第一项的最佳方法是什么?

Luk*_*lch 8 c# linq scope

我明白这有点微不足道但......

如果存在,那么获取引用的最佳方法是什么?假设集合包含引用类型的项.

代码示例1:

if (collection.Any())
{
    var firstItem = collection.First();
    // add logic here
}
Run Code Online (Sandbox Code Playgroud)

上面的示例在集合上有两个单独的调用,开始迭代,一旦检测到第一个就完成.

代码示例2:

var firstItem = collection.FirstOrDefault();
if (firstItem != null)
{
    // add logic here
}
Run Code Online (Sandbox Code Playgroud)

上面的示例只对集合进行了一次调用,但引入了一个不必要地在更广范围内的变量.

是否存在与此方案相关的最佳实践?有更好的解决方案吗?

Jar*_*Par 6

我更喜欢第二个例子,因为它在一般情况下更有效.这个集合可能是许多不同的延迟评估LINQ查询的组合,因此即使获得第一个元素也需要非常重要的工作量.

例如,假设此集合是从以下LINQ查询构建的

var collection = originalList.OrderBy(someComparingFunc);
Run Code Online (Sandbox Code Playgroud)

只获取第一个元素collection需要完整的内容originalList.每次collection评估元素时都会发生这种完整排序.

第一个样本导致可能昂贵的集合被评估两次:通过AnyFirst方法.第二个样本只评估一次集合,因此我会在第一个样本中选择它.