如果只有一个元素,将List <T>转换为T项?

l33*_*33t 4 c# lambda

我有List<>N个项目.我想得到第一个元素当且仅当N = 1.这可以使用lambda或其他一些好的构造来完成吗?

这有效,但看起来很糟糕:

var blah = new List<Object>() { new Object() };
var item = (blah.Count == 1 ? blah[0] : null);
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 7

有几种LINQ扩展方法.

  1. SingleOrDefault 如果有一个元素将被返回,如果没有,default<T>将返回,如果有多个元素将被抛出
  2. FirstOrDefault 如果有一个元素将被返回,如果没有,default<T>将返回
  3. ElementAtOrDefault 返回给定位置的元素,或者default<T>序列没有那么多元素

所以例如(我的首选你的要求):

var item = blah.ElementAtOrDefault(0);
Run Code Online (Sandbox Code Playgroud)

满足您要求的最佳方法取决于此规则的严格程度:

当且仅当N = 1时,我想得到第一个元素.

如果异常中序列中有多个元素,请使用SingleOrDefault,如果它失控,您将被告知(错误日志).

如果你获得第一个元素并且你永远不会想要另一个元素是很重要的,那么使用得更好,FirstOrDefault因为它有一个有意义的名字.

如果序列中元素的索引很重要并且您(当前)需要第一个元素,但将来可能会更改,请使用ElementAtOrDefault.