如果我没记错的话,这是 C# 语言设计的一部分。const
保留用于可以在编译时推断其内容的项目,即在程序构建然后运行之前(期间)。 C#中的所有数组都是运行时数组(它们的长度是在程序运行时确定的,而不是在此之前),因此它们不能变成const
字段。我觉得这是 C# 的限制,但这就是他们决定这样做的方式。
引用类型可以为 null 的原因是null
是一个常量值,而您的初始化程序(在运行时创建)不是。null
内置于语言中,因此通过该逻辑,它的值始终是已知的(因此可用于编译时引用类型)。
EDIT:
不过,您应该能够创建一个静态表,该表将在任何其他代码使用或需要时进行初始化:
public static int[,] i = { { 1, 2, 3 }, { 1, 2, 3 }, { 1, 2, 3 } };
^ Static Keyword
您可以像这样访问它(如果它仍然在class A
):
A.i[0, 1]
我希望对你有帮助
要了解更多信息,请查看 MSDN:http://msdn.microsoft.com/query/dev11.query?appId=Dev11IDEF1&l=EN-US&k=k(CS0134);k(TargetFrameworkMoniker-.NETFramework,版本%3Dv4.5)&rd=true http://msdn.microsoft.com/query/dev11.query?appId=Dev11IDEF1&l=EN-US&k=k(CS0134);
编辑编辑:
如果您需要将静态表固定到代码上,并且在初始化后绝不让任何人更改它,那么可以使用readonly
为此目的的关键字:
public static readonly int[,] i = { { 1, 2, 3 }, { 1, 2, 3 }, { 1, 2, 3 } };
^ Static ^Readonly Keywords
请记住,它不会阻止您将内容重新分配到这些槽中,但它与 C# 所能提供的一样固定,除了创建属性或每次返回一个新数组之外。