我正在.NET CF 3.5环境中开发一个C# Winform应用程序。
我知道在下面的例子中出现了一个TypeInitializationException。
static int [] ArrayB = new int [ArrayA.Length];
static int [] ArrayA = new int [] {1, 2, 3, 4};这是因为当声明ArrayB时,ArrayA为null。因此,如果您按如下所示进行更改,则不会出现错误。
static int [] ArrayA = new int [] {1, 2, 3, 4};
static int [] ArrayB = new int [ArrayA.Length];那么,为什么下面的示例不抛出一个TypeInitializationException呢?
static int [] ArrayB = new int [len];
static int len = 4;ArrayB在len之前声明。我认为应该会出现错误,因为在声明ArrayB时len还没有初始化。
但是为什么没有出现错误呢?
发布于 2019-07-30 09:20:19
即使它没有抛出异常,ArrayB的长度仍然是零(整型的默认值)。下面是某人的解释:“意外值的原因可以在C#语言规范中找到。这是有关C#语法和用法的权威文档。文档规定,静态字段永远不能被视为未初始化的值。如果在应用某个值之前访问它们,则返回其数据类型的默认值。对于整数值,该值为零。C#语言规范还告诉我们,当通过在声明中应用一个值来初始化静态字段时,就像我们上面所做的那样,它们将按照它们在代码中出现的顺序进行设置。这意味着在计算ArrayB值时,我们使用了两个未初始化的值,每个值的结果都是零。“有关更多信息,请访问:Doc
https://stackoverflow.com/questions/57263026
复制相似问题