我有一个带有静态成员的内部静态类MyLists
internal static ImmutableArray<string> MyList = new ImmutableArray<string> { "asd", "qwe" };
在另一个公共测试类测试中,我有一个MyTest函数,用于选择和比较列表。我得到了
Additional information: The type initializer for 'TestMyLists' threw an exception.
Object reference not set to an instance of an object.
[TestClass]
public class MyTests {
[TestMethod]
public void TestMyLists() {
var list = MyLists.MyList.Select(s => s + ".foo");
}
}
当我调试时,我看到静态ImmutableArray为value = Uninitialized。为什么呢?
答案 0 :(得分:6)
如MSDN所述,你应该使用Create()
方法而不是使用构造函数来处理这种类型的数组:
internal static ImmutableArray<string> List = ImmutableArray.Create("asd", "qwe");
关于这个原因,我将把你指向Immo Landwerth的article,在那里他描述:
ImmutableArray<T>
的默认值使用空引用初始化基础数组。在这种情况下,它的行为与使用空数组初始化的ImmutableArray<T>
的行为相同,即Length
属性返回0并且迭代它不会产生任何值。在大多数情况下,这是您期望的行为。但是,在某些情况下,您可能想知道底层数组尚未初始化。因此ImmutableArray<T>
提供了属性IsDefault
,如果基础数组是null
引用,则返回true。例如,您可以使用该信息来实现延迟初始化: