为什么以下是C#中的错误?

为什么以下是C#中的错误?,c#,.net,C#,.net,为什么C#中出现以下错误 错误:引用类型不是字符串的常量字段只能 不能用null初始化 错误是不言自明的。也许,您正在查找以下内容: private static readonly int[] test = { 1, 2, 3, 4, 5 }; 从 常量表达式是可以在编译时完全计算的表达式。因此,引用类型的常量的唯一可能值是string和null 此外,尽管const字段是编译时常量,但readonly字段可用于运行时常量,如此行所示:公共静态只读uint l1=(uint)DateTime.

为什么
C#
中出现以下错误

错误:引用类型不是字符串的常量字段只能 不能用null初始化


错误是不言自明的。也许,您正在查找以下内容:

private static readonly int[] test = { 1, 2, 3, 4, 5 };

常量表达式是可以在编译时完全计算的表达式。因此,引用类型的常量的唯一可能值是string和null

此外,尽管const字段是编译时常量,但readonly字段可用于运行时常量,如此行所示:公共静态只读uint l1=(uint)DateTime.Now.Ticks


错误是不言自明的。也许,您正在查找以下内容:

private static readonly int[] test = { 1, 2, 3, 4, 5 };

常量表达式是可以在编译时完全计算的表达式。因此,引用类型的常量的唯一可能值是string和null

此外,尽管const字段是编译时常量,但readonly字段可用于运行时常量,如此行所示:公共静态只读uint l1=(uint)DateTime.Now.Ticks


您之所以出现此错误,是因为您必须首先初始化测试数组。您编写的常量类型必须用null初始化。我认为正确的定义是Public Const int[]=null

您犯了这个错误,因为您必须首先初始化测试数组。您编写的常量类型必须用null初始化。我认为正确的定义是Public Const int[]=null

在C#中,public const字段可以是null或字符串。 如果将字段设置为只读:

// 公共只读int[]测试={1,2,3,4,5}

然后您可以在C中运行此代码

,公共常量字段可以是null或字符串。 如果将字段设置为只读:

// 公共只读int[]测试={1,2,3,4,5}


然后,您就可以为.NET中的数组运行此代码了,您可以更改它们的项。您仍然可以执行以下操作:

test[3] = 7;

所以常量数组不是真正的常量,这就是为什么它是不允许的。唯一允许作为常量的引用类型是不可变的,在.NET中它们只是字符串和null。

对于.NET中的数组,您可以更改它们的项。您仍然可以执行以下操作:

test[3] = 7;

所以常量数组不是真正的常量,这就是为什么它是不允许的。唯一允许作为常量的引用类型是不可变的,在.NET中它们只是字符串和null。

错误消息已经很清楚了

您可以在313侧的第Q.4点下找到解释:

如§Constant expressions中所述,常量表达式是可以在编译时完全计算的表达式。由于创建除字符串以外的引用类型的非null值的唯一方法是应用新运算符,并且由于常量表达式中不允许使用新运算符,因此除字符串以外的引用类型的常量的唯一可能值为null

常量
public
集合
int
的最佳解决方案是

public static readonly ReadOnlyCollection<int> test = ...;
publicstaticreadonlyreadonlycollection测试=。。。;

错误消息已清除

您可以在313侧的第Q.4点下找到解释:

如§Constant expressions中所述,常量表达式是可以在编译时完全计算的表达式。由于创建除字符串以外的引用类型的非null值的唯一方法是应用新运算符,并且由于常量表达式中不允许使用新运算符,因此除字符串以外的引用类型的常量的唯一可能值为null

常量
public
集合
int
的最佳解决方案是

public static readonly ReadOnlyCollection<int> test = ...;
publicstaticreadonlyreadonlycollection测试=。。。;

Check请提供.net内部构件,例如为什么c#编译器不允许上面的内容。这一点已经讨论过了:Check请提供.net内部构件,例如为什么c#编译器不允许上面的内容。这一点已经讨论过了:除非它必须是静态的,才能更像常量-并且有一个公共静态字段,该字段引用可变数据结构(数组)通常是一个坏主意。请提供.net内部构件,例如为什么c#编译器不允许上述内容。@RaviSharma我提供了文档。您所说的.net内部构件是什么意思,我没有编写c#编译器,除非它必须是静态的,才能更像常量-并且有一个引用可变数据结构(数组)的公共静态字段通常是一个坏主意。请提供.net内部构件,例如,为什么c#编译器不允许上述内容。@RaviSharma我提供了文档。你说的.net内部构件是什么意思,我没有编写没有多大意义的c#编译器。拥有常量
null
值有什么意义?这是在您编写null之后首次使用,您可以识别没有多大意义的常量。拥有常量
null
值有什么意义?这是在您编写null之后首次使用,您可以识别常量