在C#中声明一个const double[]?
在C#中,没有办法声明一个常量数组。您需要使用索引器、属性等来确保数组的内容不被修改。您可能需要重新评估类的公共接口。
只是为了指出,静态只读(Static readonly)不是常量。
下面的代码是有效的,但不是您想要的:
class TestClass
{
public static readonly string[] q = { "q", "w", "e" };
}
class Program
{
static void Main( string[] args )
{
TestClass.q[ 0 ] = "I am not const";
Console.WriteLine( TestClass.q[ 0 ] );
}
}
您将需要找到其他方法来保护您的数组。
在C#中,声明一个常量数组是不被允许的。根据MSDN的解释,常量表达式是在编译时完全可以计算出来的表达式。由于创建一个非空引用类型(数组)的唯一方法是应用new运算符,而new运算符在常量表达式中是不允许的,所以除了字符串之外,引用类型的常量的唯一可能值就是null。
简而言之,C#中的常量数组是不可用的,因为常量必须在编译时就确定其值,而创建一个非空数组需要使用new运算符,而这在常量表达式中是不允许的。
然而,如果你想声明一个类似常量的数组,你可以使用readonly关键字来声明一个只读字段。这样,虽然它不是一个真正的常量,但它在运行时保持不变。下面是一个示例代码:
class Program { static readonly double[] numbers = { 1.0, 2.0, 3.0, 4.0 }; static void Main(string[] args) { // 使用numbers数组 } }
在上面的示例中,我们使用readonly关键字声明了一个只读的double数组。虽然它不是一个真正的常量,但它在运行时保持不变,不能被修改。这样,我们就可以在程序的其他地方使用这个数组,而不必担心它会被修改。
总结起来,虽然在C#中不能声明一个真正的常量数组,但我们可以使用readonly关键字来声明一个只读的数组,以达到类似常量的效果。
问题的原因是在C#中声明一个const double[]数组时,数组是引用类型,而const关键字要求被赋值的变量是常量。解决方法是使用static readonly关键字来声明数组,或者为每个double值分配一个独立的标识符。
在C#中,static const double[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9};
实际上等同于 static const double[] arr = new double[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9};
。由于数组是引用类型,而const关键字要求赋值的变量是常量,因此会出现问题。
解决方法是使用static readonly关键字来声明数组,或者为每个double值分配一个独立的标识符。另外,对于引用类型,只能将null赋值给const变量,但这在实际应用中没有实际意义。
,问题出现的原因是数组是引用类型而const关键字要求被赋值的变量是常量。解决方法是使用static readonly关键字来声明数组,或者为每个double值分配一个独立的标识符。