IEnumerable函数返回null导致值不能为null异常

时间:2018-03-22 05:46:09

标签: c#

GetAll会返回IEnumerable,在这种情况下,null

List<TaskNote> notes = noteManager.GetAll(newTaskId).ToList();

我收到如下错误:

  

System.ArgumentNullException:&#39;值不能为null。参数名称:   源&#39;

这是预期的吗?在执行ToList()之前,我是否应该始终检查null?

3 个答案:

答案 0 :(得分:5)

最佳做法是在返回集合或可枚举时永远不会返回null。总是返回一个空的枚举/集合。

您可以轻松返回空的枚举而不是null。

public IEnumerable<Test> GetTest()
{
  return GetTestForMe() ?? Enumerable.Empty<Test>();
}

使用Enumerable.Empty<T>()可以被视为比返回null更有效。优点是Enumerable.Empty不会在调用时创建对象,因此它会减少对GarbageCollector的负担。 Enumerable.Empty<T>缓存空集合的创建,因此将始终返回相同的集合。

答案 1 :(得分:3)

黄金法则:不要为集合类型返回null。

  

在执行ToList()之前,我是否应该始终检查null?

这取决于谁是GetAll方法的所有者。如果你 - 遵守规则,如果没有 - 更好的检查。

答案 2 :(得分:0)

rows         4020
reserved    2974576 KB
data        2974168 KB
index_size       40 KB
unused          368 KB

这是做NUll CHECK的简短代码;