LINQ使用带Try.Catch的Single与带Count的First=1.
本文关键字:Count 与带 First Single LINQ Try Catch | 更新日期: 2023-09-27 18:11:09
获取列表中唯一元素的最佳方式是什么?如果它不等于1,记录它。
试试好吗。。接球挡对单打?或者使用Count?
try
{
var item = list.Single();
}
catch(System.InvalidOperationException)
{
//log
Console.WriteLine("The collection does not contain exactly one element.");
}
或
if(list.Count!=1)
{
//log
Console.WriteLine("The collection does not contain exactly one element.");
}
var item = list.FirstOrDefault();
好吧,try {...} catch {...}
将执行堆栈跟踪,这意味着有很多开销。因此,第二种可能性是更好的(当使用List<T>
时,Count
是一个很好的选择(。实际上,您根本不需要Linq:
// list.Count is just a integer field, a very cheap comparison
if (list.Count != 1) {
// 0 or many items (not a single one)
...
}
else {
// list contains exactly one item
var item = list[0];
...
}
小心陷阱像这样:
List<Object> list = new List<Object>() {
null,
123
};
// item == null even if list has TWO items
var item = list.FirstOrDefault();
if (list == null || list.Count != 1)
{
Console.WriteLine("The collection does not contain exactly one element.");
}
正如Iridium所评论的,Single()
或SingleOrDefault()
可能不是这里的最佳选择,因为如果有多个元素或列表等于null,它会抛出异常。
我用null
检查和与count
的比较来代替它
这种方式是更好的
if(list.Count!=1)
{
//log
Console.WriteLine("The collection does not contain exactly one element.");
}
var item = list.FirstOrDefault();