2 回答
TA贡献1942条经验 获得超3个赞
基本上,变量声明实际上比您想象的要宽;第二个示例受到“明确分配”的影响,因为它被声明(更广泛),但实际上并未分配,因此++对未分配的值毫无意义。
如果你想要范围 per case,你可以做到......只需添加大括号:
switch (x)
{
case 1:
{
uint cId = (uint)3;
break;
}
case 2:
{
uint cId = (uint)5;
break;
}
}
是不是有点烦?是的。它是反直觉的吗?是的。它会永远改变吗?不太可能,因为这将是一个重大的突破性变化,会阻止许多现有的 C# 编译。
TA贡献1802条经验 获得超5个赞
嗯,uint cId是在你的情况下定义的范围{...} 内switch scope
switch (x)
{
case 1:
uint cId = (uint)3; // <- definition
break;
case 2:
// cId has been defined and thus can be assigned (initialization)
cId = (uint)5; //NO ERROR HERE WHY?
break;
} // <- end of cId scope
在第二种情况下variable已定义,但作为局部变量必须在使用前初始化(增量):
switch (x)
{
case 1:
int y = 3;
uint variable = tst; // <- definition
break;
case 2:
// variable defined, but has not been initialized ("case 1:" hasn't been run),
// variable contains trash and so you can't increment it
variable++; //ERROR HERE WHY?
break;
} // <- end of variable scope
- 2 回答
- 0 关注
- 148 浏览
添加回答
举报