首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态ImmutableArray未初始化

静态ImmutableArray未初始化
EN

Stack Overflow用户
提问于 2016-11-16 13:20:42
回答 1查看 2.2K关注 0票数 9

我有一个内部静态类MyLists和一个静态成员:

代码语言:javascript
复制
internal static ImmutableArray<string> MyList = 
    new ImmutableArray<string> { "asd", "qwe" };

在另一个公共测试类测试中,我有一个MyTest函数,它选择和比较列表。

代码语言:javascript
复制
[TestClass]
public class MyTests {
  [TestMethod]
  public void TestMyLists() {
    var list = MyLists.MyList.Select(s => s + ".foo");
  }
}

但是,我得到了以下错误:

代码语言:javascript
复制
Additional information: The type initializer for 'TestMyLists' threw an exception.
Object reference not set to an instance of an object.

调试时,我将静态ImmutableArray看作值=未初始化的值。为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-16 13:40:08

根据ImmutableArray上的文档,应该使用Create()方法,而不是对这种类型的数组使用构造函数,如下所示:

代码语言:javascript
复制
internal static ImmutableArray<string> List = ImmutableArray.Create("asd", "qwe");

关于原因,我将向您介绍Immo的文章欢迎ImmutableArray,他在文章中描述:

ImmutableArray<T>的默认值具有一个空引用初始化基础数组。在本例中,它的行为方式与使用空数组初始化的ImmutableArray<T>相同,即Length属性返回0,而迭代它根本不产生任何值。在大多数情况下,这就是您所期望的行为。但是,在某些情况下,您可能想知道基础数组尚未初始化。因此,ImmutableArray<T>提供了属性IsDefault,如果基础数组是null引用,则返回null。例如,您可以使用该信息来实现延迟初始化。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40633231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档