何时在C#中返回空引用类型是正确的

时间:2017-06-12 08:34:38

标签: c# reference null pass-by-reference

我有一个C#方法,可以返回一个对象。我更喜欢这种方法不会抛出任何异常。

我的问题是,是否可以让方法返回null并因此在没有进一步警告的情况下将空检查责任交给调用者?

被调用者是否应该假定对象可能为null,只是因为它是引用类型? (并且引用类型的默认值为null: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/null

请参阅下面的示例

// this method is expected to return an object
public MyClass getObject()
{
  MyClass myObject = null;
  // Another option would be to initialize to a new instance, calling the default constructor and not setting any properties 
  // MyClass myObject = new MyClass(); // no null check needed by the caller, but it is a pretty useless object 

  try
  {
    // just as an example  
    myObject = new MyClass();
  }
  catch (Exception e)
  {
    Console.WriteLine(e.Message);
  }
  return myObject; // will return null when and exception occured
}

public class MyClass
{
  public int id { get; set; }
  public string name { get; set; }
} 

1 个答案:

答案 0 :(得分:0)

是的,您可以返回null同样正在进行的操作,在这种情况下,调用者在尝试访问对象的任何属性之前检查是否存在无效性。使用C#6语法

muobject?.Age

每种模式可以使用Null Object Pattern;在这种情况下,您返回一个空对象而不是返回null。因此,即使来电者出错,它也不会被NullRefException炸毁。出于验证目的,您可以检查属性值,如if(string.IsNullOrEmpty(myobject.name)) ....