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