当声明一个集合初始化程序并最终得到一些编译的东西时,我有点快,但是当它运行时失败了。我的问题是我写的是什么,为什么要编译?此测试再现了该问题:
[TestFixture]
public class ExploratoryTests
{
[Test, Ignore]
public void Test()
{
try
{
var test = new TestClass
{
ListOfStrings = { "hello", "world", "!" }
};
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
public class TestClass
{
public List<string> ListOfStrings { get; set; }
}
}
这将打印错误:对象引用未设置为对象的实例。
我打算做的是用new List<string> { "hello", "world", "!" }
初始化ListOfStrings。这样做很好。
我尝试过搜索,但我不知道这个构造被称为什么。我搜索了一些没有运气的C#书。我寻求的帮助是这个构造的名称和指向它应该用于什么以及为什么编译的解释的指针。
提前致谢! :)
答案 0 :(得分:2)
你在这里的代码:
var test = new TestClass
{
ListOfStrings = { "hello", "world", "!" }
};
等同于:
var test = new TestClass();
test.ListOfStrings.Add("hello");
test.ListOfStrings.Add("world");
test.ListOfStrings.Add("!");
但ListOfStrings
为null
。
如果您的课程定义如下,则不会出现任何错误:
public class TestClass
{
public List<string> ListOfStrings { get; set; }
public TestClass()
{
ListOfStrings = new List<string>();
}
}