不漂亮,但:
IEnumerable<Object1> objects = ...
var firstTwoDistinctValues = objects.Select(o => o.NullBool)
.Distinct()
.Take(2) // Early exit
.ToList();
var result = firstTwoDistinctValues.Count == 2
? null : firstTwoDistinctValues.SingleOrDefault();
现在,这是非常有效的,因为:
- 它不需要多次枚举source-collection。当源是一个列表时,这并不是什么大不了的事,但如果源是一个昂贵的/非确定性的查询,这可能很重要。
- 如果超过唯一值,它会提前退出。
此外,当source-collection为空时,它将正常工作。
有关列表,还可以有效地做到:
IList<Object1> objects = ...
var firstNullBool = objects.Select(o => o.NullBool).FirstOrDefault();
var result = objects.All(o => o.NullBool == firstNullBool) ? firstNullBool : null;
来源
2012-01-24 07:10:53
Ani
检查所有的东西都是平等的吗?所有的布尔值是相等的? – sblom
是的,我只是想返回一个可为null的布尔值,而不是一个可为null的布尔值列表。 –
获取NullBool的独特性,如果全部相同,您应该只获得一条记录:) – V4Vendetta