我有以下代码定义数组
public class PalphabetsDic
{
public static string[] PAlphCodes = new string[3] {
PAlphCodes[0] = "1593",
PAlphCodes[1] = "1604",
PAlphCodes[2] = "1740",
};
}
当我使用这个数组时
var text = PalphabetsDic.PAlphCodes[1]
给出错误:
'Dota2RTL.PalphabetsDic'的类型初始值设定项引发了异常。 ---> System.NullReferenceException:未将对象引用设置为对象的实例。
有人可以帮我吗?
请注意,What is a NullReferenceException, and how do I fix it?涵盖数组,但PAlphCodes = new string[3]
应将其设置为null
。
答案 0 :(得分:6)
初始化您的方式时,您不需要索引值:
public static string[] PAlphCodes = new string[] {
"1593",
"1604",
"1740",
};
答案 1 :(得分:2)
为了扩展肯尼迪的回答 - 你也可以使用
public static string[] PAlphCodes = { "1593", "1604", "1740" };
参考手册列出了所有可能的方法 - 但肯尼迪建议的 - 以及这种方法 - 可能是最常见的。
https://msdn.microsoft.com/en-us/library/aa287601(v=vs.71).aspx
答案 2 :(得分:0)
事实上,您已经使用strnage语法初始化数组,如其他答案中所指出的那样,static string[] PAlphCodes = new []{"1","2","3"};
之类的东西可以解决问题。
关于为什么这实际编译(这对大多数人来说有点令人惊讶):
您可以使用静态字段初始化其他静态字段,但令人惊讶的是,如果字段本身,您也可以在初始化内引用静态字段。所以没有编译时错误。
它首先在NullReferenceException
的运行时失败,因为在第一次使用它时,数组的初始化没有完成 - 因此创建数组时PAlphCodes
为null
。但由于这是类级初始化的一部分(因为它是静态字段),这个异常也会停止创建类实例,并且你得到了#34;类型初始化器...."包裹NullReferenceException
。
请注意,在大多数情况下,此类构造甚至不会编译。即 在编译时使用
在局部变量的非静态字段中使用它失败字段初始值设定项不能引用非静态字段,方法或属性...
public class PalphabetsDic
{
public string[] PAlphCodes = new string[3] {
PAlphCodes[0] = "1593", // error here and other lines
PAlphCodes[1] = "1604",
PAlphCodes[2] = "1740",
};
}