Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我在C#中声明了一个变量,不能在switch语句中使用它_C#_Variables_Scope_Switch Statement_Local - Fatal编程技术网

我在C#中声明了一个变量,不能在switch语句中使用它

我在C#中声明了一个变量,不能在switch语句中使用它,c#,variables,scope,switch-statement,local,C#,Variables,Scope,Switch Statement,Local,考虑一下这个C代码: 如果我在switch语句中给decimalsum一个值,它将弹出一个错误语句,说明: 使用未分配的局部变量“sum” 我是C#的新手,所以说这话听起来可能很愚蠢。看起来我已经在switch语句中设置了sum的值。我试着把同样的sum=12M在所有其他case语句中,但这似乎没有帮助 顺便说一句,我在修改switch语句之外的其他变量时也遇到了一些问题——例如,rite,左 您只为一个条件设置sum的值,因此当您尝试将其转换为字符串时,它不会总是在指定点处被指定。尝试将其声明

考虑一下这个C代码:

如果我在switch语句中给decimal
sum
一个值,它将弹出一个错误语句,说明:

使用未分配的局部变量“sum”

我是C#的新手,所以说这话听起来可能很愚蠢。看起来我已经在
switch
语句中设置了sum的值。我试着把同样的
sum=12M
在所有其他case语句中,但这似乎没有帮助


顺便说一句,我在修改switch语句之外的其他变量时也遇到了一些问题——例如,rite,左

您只为一个条件设置sum的值,因此当您尝试将其转换为字符串时,它不会总是在指定点处被指定。尝试将其声明为
decimalsum=0.0gr
不等于“X”
sum
则code>没有值。编译器正在就此向您发出警告。

编译器检测到存在一个执行路径,该路径中不会分配变量。如果
gr
不是
X
,则在switch语句之后将使用未赋值值

您只需将初始值添加到声明中:

decimal sum = 0m;

只有
实例变量
获得默认值,因此像
sum
这样的局部变量必须
初始化
,才能在其他地方使用。由于可能不会为其分配任何内容,编译器会引发错误。

这是因为只有在switch语句遇到“X”的情况下才分配变量sum。要解决此问题,请通过在顶部执行以下操作来设置默认值:

decimal sum = 0m;

只需在声明时为其指定默认值,您就不会出现错误:

decimal sum = 0;

在申报时,您应使用以下内容:

decimal sum=0m;

编译器无法确保第一个大小写保持不变,因此在不赋值的情况下仍可使用sum

您是否也将其放入了
默认值中?无论哪种方式,都需要通过所有代码路径对其进行初始化。最简单的方法是将顶部的声明更改为:
decimal sum=0.0m
。旁白:使用try/catch和cast来解析字符串输入。考虑使用。
decimal sum=0m;