我有一个内部静态类MyLists和一个静态成员:
internal static ImmutableArray<string> MyList =
new ImmutableArray<string> { "asd", "qwe" };在另一个公共测试类测试中,我有一个MyTest函数,它选择和比较列表。
[TestClass]
public class MyTests {
[TestMethod]
public void TestMyLists() {
var list = MyLists.MyList.Select(s => s + ".foo");
}
}但是,我得到了以下错误:
Additional information: The type initializer for 'TestMyLists' threw an exception.
Object reference not set to an instance of an object.调试时,我将静态ImmutableArray看作值=未初始化的值。为什么?
发布于 2016-11-16 13:40:08
根据ImmutableArray上的文档,应该使用Create()方法,而不是对这种类型的数组使用构造函数,如下所示:
internal static ImmutableArray<string> List = ImmutableArray.Create("asd", "qwe");关于原因,我将向您介绍Immo的文章欢迎ImmutableArray,他在文章中描述:
ImmutableArray<T>的默认值具有一个空引用初始化基础数组。在本例中,它的行为方式与使用空数组初始化的ImmutableArray<T>相同,即Length属性返回0,而迭代它根本不产生任何值。在大多数情况下,这就是您所期望的行为。但是,在某些情况下,您可能想知道基础数组尚未初始化。因此,ImmutableArray<T>提供了属性IsDefault,如果基础数组是null引用,则返回null。例如,您可以使用该信息来实现延迟初始化。
https://stackoverflow.com/questions/40633231
复制相似问题