使用未分配的局部变量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#中,不允许使用未初始化的变量。如果你不分配默认值,或者使用构造函数,编译器将不知道你的值是什么,因此无法使用它
您需要将double a
更改为double a = 0;
或double a = new double();
。new double()
操作将根据此默认值表将默认值设置为零。但是,= 0
是首选语法。
顺便说一句,在C#中,在自己的行中声明变量也是一种很好的做法。直接在for
语句中声明循环变量也是如此。我还建议使用有意义的变量名(a
和u
对每个人来说都不明显),可读性非常重要。
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位)。
double a = 0;double u = 0; int i;
for (i = 0; i < 30; i++)
{
u += (i + 1) * datas[i];
}
变量u
在u += ...
的第一次执行中未赋值
并且由于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;