我有这个代码:
List<int> myList = new List<int>();
var max = myList.Max();
Console.Write(max);
Run Code Online (Sandbox Code Playgroud)
我想要确保如果列表中没有元素,它应该使用int(0)的默认值.但是InvalidOperationException却被抛出,说明"序列不包含任何元素".
当然我可以使用Any或查询语法(如此处所示).但我想用流利的语法来做.
我怎样才能解决这个问题?
Spo*_*xus 75
试试这个:
var myList = new List<int>();
var max = myList.DefaultIfEmpty().Max();
Console.Write(max);
Run Code Online (Sandbox Code Playgroud)
LINQ的DefaultIfEmpty-method检查序列是否为空.如果是这种情况,它将返回一个单例序列:一个只包含一个元素的序列.这一个元素具有序列类型的默认值.如果序列确实包含元素,则DefaultIfEmpty-method将只返回序列本身.
有关详细信息,请参阅MSDN
小智 7
一个扩展呢?
public static int MaxOrDefault<T>(this IEnumerable<T> enumeration, Func<T, int> selector)
{
return enumeration.Any() ? enumeration.Max(selector) : default(int);
}
Run Code Online (Sandbox Code Playgroud)