static ImmutableArray未初始化

时间:2016-11-16 13:20:42

标签: c# immutablearray

我有一个带有静态成员的内部静态类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。为什么呢?

1 个答案:

答案 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。例如,您可以使用该信息来实现延迟初始化: