使用SingleOrDefault()
查询正数列表时,如果在列表中找不到数字,而不是类型的默认值(0),如何返回null或自定义值(如-1)在这种情况下)?
答案 0 :(得分:11)
您可以使用DefaultIfEmpty
为空集合指定自定义默认值:
var value = numbers.Where(MyFilter)
.DefaultIfEmpty(-1) //or any other default value you want
.Single(); //OrDefault not needed; DefaultIfEmpty ensures there is an item
答案 1 :(得分:8)
您可以使用:
var first = theIntegers
.Cast<int?>()
.SingleOrDefault(i => i == theValue) ?? valueIfNotFound;
这可以通过将项目转换为Nullable<int>
,然后使用null-coalescing operator返回您选择的值,如果返回null
(即:未找到)。
请注意,如果您有多个匹配项,则会抛出此值。如果您不想要这种行为,请使用FirstOrDefault
代替SingleOrDefault
。
答案 2 :(得分:0)
您必须将列表中的类型更改为int?
(可以为空的int)。对于整数,返回的默认值为0。对于引用类型,它将为null。如果不重载方法,则无法使默认的重新转换值成为客户值。
答案 3 :(得分:0)
也许你的问题是简化的,所以这不适用,但是如果你只是寻找一个你已经知道的数字,并且想要返回一个任意数字,如果它不在列表中,你可以使用Any-Extension方法:< / p>
int numberToLookFor = 42;
int arbitraryReturnOnNotFound = 17;
int result = numbers.Any( n => n == numberToLookFor ) ? numberToLookFor : arbitraryReturnIfNotFound;