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

时间:2013-10-03 17:57:23

标签: c# linq

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

4 个答案:

答案 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;