在C#中声明一个const double[]?

30 浏览
0 Comments

在C#中声明一个const double[]?

我有几个常量需要使用,我的计划是将它们放在一个双精度的const数组中,但是编译器不允许我这样做。\n我尝试过这样声明:\n

const double[] arr = {1, 2, 3, 4, 5, 6, 73, 8, 9 };

\n然后我决定将其声明为静态只读:\n

static readonly double[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9};

\n然而问题仍然存在。为什么编译器不允许我声明一个包含const值的数组?或者它会允许,只是我不知道怎么做?

0
0 Comments

在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 ] );

}

}

您将需要找到其他方法来保护您的数组。

0
0 Comments

在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关键字来声明一个只读的数组,以达到类似常量的效果。

0
0 Comments

问题的原因是在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值分配一个独立的标识符。

0