【发布时间】:2012-07-18 15:50:35
【问题描述】:
我希望能够知道 .NET Framework 中哪些方法返回 null。
例如;当我从IQueryable 调用搜索方法时,如果搜索未找到任何结果,它将返回 null 或空集合。
我们学习了一些方法,但是当涉及到新方法时,我总是编写额外的代码行,这使得代码更难阅读。
有没有简单的方法来解决这个问题?
编辑:
我总是遇到这个问题是这样的:
List<int> ints = new List<int>(); // Suppose this is a list full of data
// I wanna make sure that FindAll does not return null
// So getting .Count does not throw null reference exception
int numOfPositiveInts = ints.FindAll(i => i > 0).Count;
// This is not practical, but ensures against null reference return
int numOfPositiveInts = ints.FindAll(i => i > 0) != null ? ints.FindAll(i => i > 0).Count : 0;
第一个选项实用但不安全,而第二个选项可防止任何空引用异常但降低可读性。
谢谢。
【问题讨论】:
-
如果方法返回的类型是 ValueType 它不能为 null,如果它是 referenceType 它可以是 null 或者我误解了你的问题。
-
大多数方法在返回 null 时会在描述中指定。例如,
Where从不返回 null。SingleOrDefault如果Count()==1将返回单个元素,如果没有元素,则返回默认值(如果是引用值,则为 null,对于原语为 0 或 false),如果存在多个元素,则抛出异常。 -
@PLB,如果方法返回类型是引用类型,它是否总是可以返回null?我认为一些返回引用的方法(尤其是集合类型)返回空集合而不是空引用。
-
@Mert 返回引用类型意味着它可能为空,因此最好检查对象是否为空。如果您已经看到方法的内部实现并且您确定它不会为 null,那么您不必再次检查 null-s。如果您想知道方法的确切返回值是什么,请阅读官方 .NET 文档。如果您使用其他程序员编写的库并且您无法查看里面的内容,请始终检查是否存在空值。
-
@PLB,我在文档中找不到有关空引用返回的任何信息。你能检查我的编辑吗?
标签: c# null null-check