我应该总是检查返回值是否为空

Fan*_*Jia 2 c# null

如果在一个班级A:

Class A
    public List<string> getValues
Run Code Online (Sandbox Code Playgroud)

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

Class B
    public void GetSomething
        foreach (var thing in A.getValues)
            //do something....
Run Code Online (Sandbox Code Playgroud)

要么

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

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

Ger*_*anK 6

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