在使用空传播运算符一段时间后,我偶然发现编写了一个用于选择单个项目的 linq 子句。是否有理由(性能、最佳实践)不使用 ?.First()?
MyList?.First();
或者
MyList.FirstOrDefault();
在使用空传播运算符一段时间后,我偶然发现编写了一个用于选择单个项目的 linq 子句。是否有理由(性能、最佳实践)不使用 ?.First()?
MyList?.First();
或者
MyList.FirstOrDefault();
这不是性能或最佳实践的问题;他们只是不做同样的事情。
MyList?.First()MyList如果为 null将返回 null (First()由于 null 传播运算符甚至不会被调用),InvalidOperationException如果它为空则抛出一个(因为First()对空列表的调用是无效的)。
MyList.FirstOrDefault()将抛出ArgumentNullExceptionif MyListis null (因为您不能FirstOrDefault使用 null 调用),如果列表为空,则返回 null (或类型的默认值,如果它是值类型)。
要处理这两种情况(MyList为空,MyList为空),您可以这样做:
MyList?.FirstOrDefault()
这两行根本不等价。
如果不包含任何元素,则第一个将抛出MyList,但如果它为空则不会。
如果为 null,则第二个将抛出MyList,但如果它不包含任何元素,则不会。