关于Linq中First、FirstOrDefault;Last、LastOrDefault等方法的说明
这里以First、FirstOrDefault进行说明,其他类似。
1、First:取序列中满足条件的第一个元素,如果没有元素满足条件,则抛出异常
2、FirstOrDefault:取序列中满足条件的第一个元素,如果没有元素满足条件,则返回默认值(对于可以为null的对象,默认值为null,对于不能为null的对象,如int,默认值为0)
First、FirstOrDefault的区别在于:当没有元素满足条件时,一个抛出异常,一个返回默认值。
因此,在使用时,一定要注意这个区别:
1、当确信序列中一定有满足条件的元素时,使用First方法,取到元素后,无需判断是否为null
2、当序列中可能找不到满足条件的元素时,使用FirstOrDefault方法,然后,一定要对返回值是否为null,进行不同的处理a
关于Linq中Max、Min方法的使用
在使用Max或Min方法时,必须要保证调用方必须至少存在一个元素,若没有元素,则会抛出异常
如(假设ints的类型为IEnumerable:
int max = ints.Max(); //当ints的个数为0时,则抛出异常
为避免这个问题,一般情况下,可以如下编写:
int max = 0; //先设置一个默认值,即如果没有元素时,应该取的值
if (ints.Any())
{
max = ints.Max();
}
还有一种方式是使用DefaultIfEmpty方法:
ints.DefaultIfEmpty().Max(); //DefaultIfEmpty方法,会在ints元素个数为0时,返回一个存在唯一一个默认值元素的IEnumerable,这样调用Max时,就不会抛异常了
ints.DefaultIfEmpty(10).Max(); //也可以指定一个默认值,即当ints元素个数为0时,返回一个存在唯一一个元素的IEnumerable,而这唯一一个元素,就是你指定的值