Null传播?.First()vs .FirstOrDefault()

时间:2015-08-20 09:48:39

标签: linq c#-6.0 null-propagation-operator

使用null传播运算符一段时间后,我偶然发现了一个用于选择单个项目的linq子句。有没有理由(表现,最佳实践)不使用?。第一()?

iex -S mix

MyList?.First();

2 个答案:

答案 0 :(得分:11)

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

如果MyList?.First()为空,

MyList将返回null(由于null传播运算符,甚至不会调用First()),如果它为空则抛出InvalidOperationException (因为在空列表上调用First()无效)。

如果MyList.FirstOrDefault()为null(因为您无法使用null调用ArgumentNullException),

MyList将抛出FirstOrDefault,并返回null(或类型的默认值,如果如果列表为空,则为值类型。

要处理这两种情况(MyList为空,MyList为空),您可以执行此操作:

MyList?.FirstOrDefault()

答案 1 :(得分:2)

这两行根本不相同。

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

如果MyList为空,则第二个将抛出,但如果它不包含元素则不抛出。