为什么 resharper 认为私有只读变量可以为空

本文关键字:变量 只读 resharper 为什么 | 更新日期: 2023-09-27 18:32:23

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

private readonly IList<MyClass> _myClasses = new List<MyClass>();
void Foo()
{
    _myClasses.Clear(); // Possible 'System.NullReferenceException'
}

为什么 resharper 认为私有只读变量可以为空

只读

表示"构造函数完成后无法更改"。因此,任何构造函数都可以将其值更改为 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,如果依赖于此值,则不为 null 的情况下,

则例外。