iTE*_*Egg 8 c# switch-statement unassigned-variable
我是编程新手并遇到以下代码问题的新手:
private string alphaCoords(Int32 x)
{
char alphaChar;
switch (x)
{
case 0: alphaChar = 'A'; break;
case 1: alphaChar = 'B'; break;
case 2: alphaChar = 'C'; break;
case 3: alphaChar = 'D'; break;
case 4: alphaChar = 'E'; break;
case 5: alphaChar = 'F'; break;
case 6: alphaChar = 'G'; break;
case 7: alphaChar = 'H'; break;
case 8: alphaChar = 'I'; break;
case 9: alphaChar = 'J'; break;
}
return alphaChar.ToString();
}
Run Code Online (Sandbox Code Playgroud)
编译器说:使用未分配的局部变量'alphaChar'
但我正在我的交换机块中分配它.
我确定这是我的错,因为我对编程知之甚少.
请指教.
谢谢.
Jon*_*eet 35
如果 x为0-9 ,则指定它.如果x是123,你会期望它做什么?虽然您可能知道只传入0到9之间的值,但编译器没有 - 所以它需要考虑否则会发生什么.
避免这种default情况的一种方法是在switch语句中有一个case,如果值不在预期范围内,你可以使用它来抛出异常:
switch (x)
{
case 0: alphaChar = 'A'; break;
case 1: alphaChar = 'B'; break;
case 2: alphaChar = 'C'; break;
case 3: alphaChar = 'D'; break;
case 4: alphaChar = 'E'; break;
case 5: alphaChar = 'F'; break;
case 6: alphaChar = 'G'; break;
case 7: alphaChar = 'H'; break;
case 8: alphaChar = 'I'; break;
case 9: alphaChar = 'J'; break;
default: throw new ArgumentOutOfRangeException();
}
Run Code Online (Sandbox Code Playgroud)
这里有一个稍微简单的替代方法,它会完全删除你的switch语句:
if (x < 0 || x > 9)
{
throw new ArgumentOutOfRangeException();
}
char alphaChar = (char)('A' + x);
Run Code Online (Sandbox Code Playgroud)
请注意,你就需要使用算术这样的时候必须小心.在Java和C#中,底层表示保证是Unicode,这使生活变得更容易.我相信它对于这样的事情(以及十六进制解析/格式化)来说很好,但是当你冒险进入更奇特的场景时它会失败.然后,对于许多代码简化技术来说都是如此......如果它们被不恰当地应用,你最终会陷入混乱.
| 归档时间: |
|
| 查看次数: |
4799 次 |
| 最近记录: |