在下面的代码中,Resharper 8告诉我_myClasses有一个“可能的'System.NullReferenceException'”。这是Resharper中的一个错误,还是我缺少关于这段代码如何工作的东西?我的理解是readonly修饰符使得它只能设置_myClasses一次,而我设置它的一件事是一个实例。什么情况可能是空的?
private readonly IList<MyClass> _myClasses = new List<MyClass>();
void Foo()
{
_myClasses.Clear(); // Possible 'System.NullReferenceException'
}
答案 0 :(得分:2)
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
,如果依赖此值,则不会为null。