如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null

本文关键字:数字 列表 何返回 null 返回 SingleOrDefault 如果 搜索 | 更新日期: 2023-09-27 18:33:43

使用 SingleOrDefault() 查询正数列表时,当列表中找不到数字时,如何返回 null 或自定义值(如 -1),而不是类型的默认值(在本例中为 0)?

如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null

您可以使用:

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;