交换机中的情况怎么能没有休息?

Mar*_*rdi 3 c# c#-4.0

我最近继承了一些写得很差的代码.不幸的是,它是一个我们高度依赖的系统,并且没有时间重新编写它,所以我坚持维护它并重新编写片段.但是,今天我偶然发现这个包含一个开关的方法,其中一个case语句没有中断.这怎么能编译?我的理解是所有案件都必须打破,返回或转到.

private void ReadBadge_Activated(object sender, EventArgs e)
    {
        try
        {
            if (!bInHideMode)
            {
                // Set Button states
                btnCancelSwipe.Visible = true;
                btnCancelSwipe.Refresh();

                // Enable the Timeout timer
                //tmrTimeout.Enabled = true;

                // Refresh data
                switch (mManageAction)
                {
                    case "LogOnManager":
                    case "NormalUse":
                        lblSwipeStatus.Text = "Pass ID Badge\nNear The Reader";
                        break;
                    case "AddNewUser":
                        lblSwipeStatus.Text = "Pass ID Badge\nNear The Reader\nFor: " + mUserName;
                        break;
                    default:
                        lblSwipeStatus.Text = "Pass ID Badge\nNear The Reader\nFor: " + mUserName;
                        break;
                }
            }
        }
        catch (Exception ex)
        {
            MessageBoxNoClick.MessageBox2(ex.Message, "Error Message");
        }
    }
Run Code Online (Sandbox Code Playgroud)

Dav*_*vid 10

这个结构:

case "LogOnManager":
case "NormalUse":
    lblSwipeStatus.Text = "Pass ID Badge\nNear The Reader";
    break;
Run Code Online (Sandbox Code Playgroud)

基本上意味着第二个代码case将用于其中之一 case.因此,两种情况都使用相同的代码.

从语义上讲,这可以被认为是:

case "LogOnManager" || "NormalUse":
    lblSwipeStatus.Text = "Pass ID Badge\nNear The Reader";
    break;
Run Code Online (Sandbox Code Playgroud)

除非这不作为该switch语句的有效条件编译.(可能有几个原因,如果你想获得真正的技术,但主要是因为它评估为a bool并且switch正在运行a string.)所以你找到的版本代替了.

当一个break语句被省略时(或者更具体地说,当一个case块为空时),该过程将继续进行下一个case过程,无论下一个用于何种值case.