首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(C#)为什么此代码不抛出TypeInitializationException?

问(C#)为什么此代码不抛出TypeInitializationException?
EN

Stack Overflow用户
提问于 2019-07-30 09:02:34
回答 1查看 50关注 0票数 1

我正在.NET CF 3.5环境中开发一个C# Winform应用程序。

我知道在下面的例子中出现了一个TypeInitializationException。

代码语言:javascript
复制
static int [] ArrayB = new int [ArrayA.Length];
static int [] ArrayA = new int [] {1, 2, 3, 4};

这是因为当声明ArrayB时,ArrayA为null。因此,如果您按如下所示进行更改,则不会出现错误。

代码语言:javascript
复制
static int [] ArrayA = new int [] {1, 2, 3, 4};
static int [] ArrayB = new int [ArrayA.Length];

那么,为什么下面的示例不抛出一个TypeInitializationException呢?

代码语言:javascript
复制
static int [] ArrayB = new int [len];
static int len ​​= 4;

ArrayB在len之前声明。我认为应该会出现错误,因为在声明ArrayB时len还没有初始化。

但是为什么没有出现错误呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-30 09:20:19

即使它没有抛出异常,ArrayB的长度仍然是零(整型的默认值)。下面是某人的解释:“意外值的原因可以在C#语言规范中找到。这是有关C#语法和用法的权威文档。文档规定,静态字段永远不能被视为未初始化的值。如果在应用某个值之前访问它们,则返回其数据类型的默认值。对于整数值,该值为零。C#语言规范还告诉我们,当通过在声明中应用一个值来初始化静态字段时,就像我们上面所做的那样,它们将按照它们在代码中出现的顺序进行设置。这意味着在计算ArrayB值时,我们使用了两个未初始化的值,每个值的结果都是零。“有关更多信息,请访问:Doc

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

https://stackoverflow.com/questions/57263026

复制
相关文章

相似问题

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