【问题标题】:Checking if an object is null检查对象是否为空
【发布时间】:2015-03-19 05:49:12
【问题描述】:

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

下面是一些示例代码:

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

是否应该在每次函数调用之前检查对象是否为空?有没有必要在函数调用中检查对象是否为空?

提前致谢。

【问题讨论】:

  • 用方法检查似乎更容易管理。
  • 方法调用内部?
  • 方法TestFunction内部
  • 如果TestObject obj 不应该为空,例如如果验证应该已经在视图和控制器中完成,您可以使用Code Contracts 来检查 + 断言条件,例如通过添加 Contract.Requires(obj != null); 作为函数的第一行。

标签: c# function object null asp.net-mvc-5


【解决方案1】:

这取决于函数的用途,在您的函数的情况下,您似乎将使用它将对象插入存储库,因此将空对象传递到存储库应该引发异常,而不仅仅是静默失败。

您应该检查 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);
}

但是,在某些情况下,您可以拥有一个可以接受 null 对象的函数,如果您将其传入,则可能会返回默认值。

只是不要写这样的代码:

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

这个方法什么也不做,如果调用它的开发者没有意识到传递的对象是空的,那么它会静默失败,不会让开发者知道发生了什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 2014-01-01
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多