我应该总是检查某些东西的返回值是否为null

时间:2013-03-05 11:25:11

标签: c# null

如果在一个班级A:

Class A
    public List<string> getValues

如果我想调用该方法,我应该总是检查返回值是否为空?虽然我不认为它可能是空的(应该是一个空列表)。 即。

Class B
    public void GetSomething
        foreach (var thing in A.getValues)
            //do something....

Class B
    public void GetSomething
        var things = A.getValues;
        if (things != null)
        foreach (var thing in things)
            //then doing something....

提出这个问题的原因是,当我编写单元测试时,我在A类中使方法返回null而不是空列表,但是我不知道它在现实生活中是否会发生,因为如果它可能为null那么它总是很好检查而不是尝试捕获异常,哪一个更合适?

2 个答案:

答案 0 :(得分:6)

简而言之,不,你不应该总是检查。您使用的方法的规范应始终清楚地表明您期望的可能结果的语义是什么。因此,例如,如果您希望getValues在没有值时返回空列表,并且错误地将其写入以便返回null对象,那么NullPointerException是完全理智的事情。警告你,你搞砸了你的方法的规范或它的实现。 另一方面,也可能是getValues返回null对象的情况,因为某些条件尚未满足。在这种情况下,您应该检查,因为它实际上意味着某事。

答案 1 :(得分:0)

如果你让你的方法返回null,那么在进行任何操作之前你必须始终检查null。

在你的情况下,如果你没有检查null并且A.GetValues恰好为null,那么它将抛出异常