1

在下面的代码中,Resharper 8 告诉我 _myClasses 有一个“可能的 'System.NullReferenceException'”。这是 Resharper 中的错误,还是我缺少有关此代码如何工作的内容?我的理解是 readonly 修饰符使我只能设置 _myClasses 一次,而我将其设置为的一件事是某事的实例。这可能是什么情况?

private readonly IList<MyClass> _myClasses = new List<MyClass>();

void Foo()
{
    _myClasses.Clear(); // Possible 'System.NullReferenceException'
}
4

1 回答 1

3

readonly表示“构造函数完成无法更改”。因此任何构造函数都可以将其值更改为 null(现在或将来编写的构造函数)。

...对声明引入的字段的赋值只能作为声明的一部分或在同一类的构造函数中发生。

样本:

class Foo
{
  private readonly string myClasses = "test";

  public Foo(int value) {  }    
  public Foo(string text) {  myClasses = text;}    
  public Foo() 
  {
     myClasses = null;
     Bar();
  }

  void Bar()
  {
    if (myClasses == null)
    {
     Console.WriteLine("Null???");
    }
  }
}

在上面的示例中,如果依赖此值不为空,则Foo()构造函数将设置myClasses为并出现异常。null

于 2013-09-21T02:04:16.200 回答