如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null
本文关键字:数字 列表 何返回 null 返回 SingleOrDefault 如果 搜索 | 更新日期: 2023-09-27 18:33:43
使用 SingleOrDefault()
查询正数列表时,当列表中找不到数字时,如何返回 null 或自定义值(如 -1),而不是类型的默认值(在本例中为 0)?
您可以使用:
var first = theIntegers
.Cast<int?>()
.SingleOrDefault(i => i == theValue) ?? valueIfNotFound;
这的工作原理是将项目强制转换为Nullable<int>
,然后使用 null 合并运算符返回您选择的值(如果返回null
即:未找到)。
请注意,如果您有多个匹配项,则会引发此情况。 如果您不希望出现这种行为,请使用 FirstOrDefault
而不是 SingleOrDefault
。
可以使用
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
您必须将
列表中的类型更改为 int?
(一个可为空的整数)。对于整数,返回的默认值将为 0。对于引用类型,它将为空。如果不重载该方法,则无法将默认 retrurn 值设置为自定义值。
也许你的问题被简化了,所以这不适用,但如果你只是在寻找一个你已经知道的数字,并且想要返回一个任意数字,如果它不在列表中,你可以使用 Any-Extension 方法:
int numberToLookFor = 42;
int arbitraryReturnOnNotFound = 17;
int result = numbers.Any( n => n == numberToLookFor ) ? numberToLookFor : arbitraryReturnIfNotFound;