Null propagated ?.First() vs .FirstOrDefault()



在使用null传播操作符一段时间后,我无意中编写了一个linq子句来选择单个项。是否有不使用?.First()的理由(性能、最佳实践)?

MyList?.First();

MyList.FirstOrDefault();

这不是性能或最佳实践的问题;他们只是不做同样的事情。

MyList?.First()将返回null,如果MyList是null (First()甚至不会被调用,由于null传播操作符),并抛出InvalidOperationException,如果它是空的(因为在空列表上调用First()是无效的)。

MyList.FirstOrDefault()将抛出ArgumentNullException,如果MyList为空(因为你不能用null调用FirstOrDefault),如果列表为空则返回null(或者如果它是值类型则返回该类型的默认值)。

要处理这两种情况(MyList为空,MyList为空),您可以这样做:

MyList?.FirstOrDefault()

这两行根本不相等。

第一个将抛出如果MyList不包含任何元素,但如果它是null则不会抛出。

第二个将抛出如果MyList为null,但不包含任何元素。

相关内容

  • 没有找到相关文章

最新更新