为了账号安全,请及时绑定邮箱和手机立即绑定

有什么区别?为什么 Switch Case 在 C# 中是这样工作的?

有什么区别?为什么 Switch Case 在 C# 中是这样工作的?

C#
慕的地10843 2021-10-23 16:57:11
我有两个函数,一个可以编译,另一个不能。有什么不同?函数编号 1 是否假设 case 1 总是会被命中,或者它只是编译器问题?public void Test(int x){    switch (x)    {        case 1:            uint cId = (uint)3;            break;        case 2:            cId = (uint)5; //NO ERROR HERE. WHY?            break;    }}public void DeclaringInsideSwitch(int x){    uint tst = 0;    switch (x)    {        case 1:            int y = 3;            uint variable = tst;            break;        case 2:            variable++; //ERROR HERE. WHY?            break;    }}我当然尝试搜索“在 C# 中的 switch case 中声明变量”,但对我来说,它现在似乎是 C# 中的某种错误,保留下来是为了向后兼容。// 在收到已经回答的警告后,我的问题现在可以简化为它的真正含义。为什么:int x;x++;这行不通?
查看完整描述

2 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

基本上,变量声明实际上比您想象的要宽;第二个示例受到“明确分配”的影响,因为它被声明(更广泛),但实际上并未分配,因此++对未分配的值毫无意义。


如果你想要范围 per case,你可以做到......只需添加大括号:


        switch (x)

        {

            case 1:

            {

                uint cId = (uint)3;

                break;

            }

            case 2:

            {

                uint cId = (uint)5;

                break;

            }

        }

是不是有点烦?是的。它是反直觉的吗?是的。它会永远改变吗?不太可能,因为这将是一个重大的突破性变化,会阻止许多现有的 C# 编译。


查看完整回答
反对 回复 2021-10-23
?
慕后森

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


查看完整回答
反对 回复 2021-10-23
  • 2 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信