获取列表中唯一元素的最佳方法是什么?如果它不等于1,请记录它。
对Single使用try..catch块会更好吗?或使用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();
答案 0 :(得分:2)
好吧,try {...} catch {...}
将执行堆栈跟踪,这意味着开销很大。
所以第二种可能性更好(Count
在使用List<T>
时是一个不错的选择。实际上,你根本不需要 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();
答案 1 :(得分:1)
if (list == null || list.Count != 1)
{
Console.WriteLine("The collection does not contain exactly one element.");
}
正如Iridium评论的那样,Single()
或SingleOrDefault()
可能不是最佳选择,因为如果有多个元素或列表等于null,它会抛出异常。
我将其替换为null
- 检查并与count
答案 2 :(得分:0)
这种方式更好
window.location.href = path