我正在编写一个MVC 5互联网应用程序,关于检查对象是否为空,然后在对象中设置一些值,我有一个问题。
以下是示例代码:
public async Task TestFunction(TestObject obj)
{
obj.name = "Test Name";
repository.Insert(obj);
}
每次在函数调用之前都需要检查对象是否为空吗?在函数调用内部是否有必要检查对象是否为空?
提前感谢您的帮助。
我正在编写一个MVC 5互联网应用程序,关于检查对象是否为空,然后在对象中设置一些值,我有一个问题。
以下是示例代码:
public async Task TestFunction(TestObject obj)
{
obj.name = "Test Name";
repository.Insert(obj);
}
每次在函数调用之前都需要检查对象是否为空吗?在函数调用内部是否有必要检查对象是否为空?
提前感谢您的帮助。
这取决于该函数的目的,就你的函数而言,看起来你会将其用于将对象插入存储库,因此向存储库传递空对象应该抛出异常,而不仅是默默地失败。
您应该检查 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);
}
}
这种方法不会有任何作用,如果调用它的开发人员没有意识到传递的对象为空,那么它将悄无声息地失败,而不让开发人员知道发生了什么。
TestObject obj
不应该为 null,例如在视图和控制器中已经进行了验证,您可以使用 Code Contracts 来检查和断言条件,例如通过将Contract.Requires(obj != null);
添加为函数的第一行。 - StuartLC