检查对象是否为空

3

我正在编写一个MVC 5互联网应用程序,关于检查对象是否为空,然后在对象中设置一些值,我有一个问题。

以下是示例代码:

public async Task TestFunction(TestObject obj)
{
    obj.name = "Test Name";
    repository.Insert(obj);
}

每次在函数调用之前都需要检查对象是否为空吗?在函数调用内部是否有必要检查对象是否为空?

提前感谢您的帮助。


使用方法进行检查似乎更易于管理。 - Adil
在方法调用内部? - Simon
在方法TestFunction内部 - Adil
2
如果 TestObject obj 不应该为 null,例如在视图和控制器中已经进行了验证,您可以使用 Code Contracts 来检查和断言条件,例如通过将 Contract.Requires(obj != null); 添加为函数的第一行。 - StuartLC
1个回答

3

这取决于该函数的目的,就你的函数而言,看起来你会将其用于将对象插入存储库,因此向存储库传递空对象应该抛出异常,而不仅是默默地失败。

您应该检查 null 并在参数为 null 时抛出 ArgumentException

public async Task TestFunction(TestObject obj)
{
    if(obj == null) {
        throw new ArgumentException("obj cannot be null");
    }

    obj.name = "Test Name";
    repository.Insert(obj);
}

然而,有些情况下你可能需要编写一个可以接受空对象的函数,如果你传入空对象,它可能会返回默认值。

但是,请不要编写以下这样的代码:

public async Task TestFunction(TestObject obj)
{
    if(obj != null) {//if null don't do anything 
        obj.name = "Test Name";
        repository.Insert(obj);
    }
}

这种方法不会有任何作用,如果调用它的开发人员没有意识到传递的对象为空,那么它将悄无声息地失败,而不让开发人员知道发生了什么。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接