使用未分配的局部变量c#

本文关键字:局部变量 分配 | 更新日期: 2023-09-27 18:26:58

我在程序的开头声明了一个变量。我相信这个变量是在程序的范围内声明和使用的。

double a,u; int i;
for (i = 0; i < 30; i++)
{
    u += (i + 1) * datas[i];
}

我可以通过调试模式检查存储的u的值,但不能在其他地方使用它"使用未分配的局部变量u"我应该使用十进制吗?我使用了十进制,但由于我也使用了

datas[i-1] = Convert.ToDouble(dataReader["high"]);

在程序的其他地方,我不认为c中有Convert.toDecimal();双精度和十进制有什么区别。PS:在之前我从未使用过小数

使用未分配的局部变量c#

在C#中,不允许使用未初始化的变量。如果你不分配默认值,或者使用构造函数,编译器将不知道你的值是什么,因此无法使用它

您需要将double a更改为double a = 0;double a = new double();new double()操作将根据此默认值表将默认值设置为零。但是,= 0是首选语法。

顺便说一句,在C#中,在自己的行中声明变量也是一种很好的做法。直接在for语句中声明循环变量也是如此。我还建议使用有意义的变量名(au对每个人来说都不明显),可读性非常重要。

double a = 0;
double u = 0;
for (int i = 0; i < 30; i++)
{
    u += (i + 1) * datas[i];
}

双精度和十进制有什么区别。

decimal通常用于货币或金融操作,因为它具有更高的精度(28-29位,而15-16位表示双精度)。然而,它的范围比double小得多。decimal的范围增加到7.9 x 10^28,而double的范围增加了1.7 x 10^308。

另一方面,如果您不需要高精度或大范围,float将是最好的类型,因为它是32位的(相比之下,双精度为64位)。

变量u尚未赋值,因此不能在循环中使用。试试这个:
double a = 0;double u = 0; int i;
for (i = 0; i < 30; i++)
{
    u += (i + 1) * datas[i];
}

变量uu += ...的第一次执行中未赋值
并且由于CCD_ 15等同于CCD_。u确实有一个默认值0,但编译器不允许您使用它,它在这里强制使用良好的编程风格。

你可能想要的是:

double a, u = 0; 
for (int i = 0; i < datas.Length; i++)
{
    u += (i + 1) * datas[i];
}

不过,对于a,您仍然可能遇到同样的问题。

在使用u之前,您需要为其分配一个值。

double u = 0;

编译器将u += 1转换为u = u + 1。正如您所看到的,您读取了u,但还没有为此变量赋值。这就是为什么编译器告诉您正在使用未分配的局部变量

您从未为变量u赋值。请将声明更改为…

双u=0;