“开关”仅适用于一个“案例”

时间:2019-01-11 16:27:17

标签: c#

我检查了ActivePanel方法(字符串nameCheck)是否获得了“ switch”的所有名称。
仅执行“БДАксес”;其余的“案例”不执行。

在另一个类中,此方法有效。
没有错误发生。
只是不起作用的“开关”。

问题。
为什么“切换”不起作用?


代码

public void ActivePanel(string nameCheck)
{
    try
    {   
        switch (nameCheck)
        {

            // case "Список ссылок URL":
            case "Список":
                UrlLinkListUC urlLinkListUC = new UrlLinkListUC(settingOper);

                panel1.Controls.Clear();
                panel1.Controls.Add(urlLinkListUC);


                break;

            case "Список ссылок файлов HTML":
                HtmlFileReferenceListUC htmlFileReferenceListUC = new HtmlFileReferenceListUC(settingOper);
                panel1.Controls.Clear();
                panel1.Controls.Add(htmlFileReferenceListUC);

                break;

            case "БД Аксес":
                DbAccessLinkListUC dbAccessLinkListUC = new DbAccessLinkListUC(settingOper);
                panel1.Controls.Clear();
                panel1.Controls.Add(dbAccessLinkListUC);

                break;

            case "БД MySql":
                DbMySqlLinkListUC dbMySqlLinkListUC = new DbMySqlLinkListUC(settingOper);
                panel1.Controls.Clear();
                panel1.Controls.Add(dbMySqlLinkListUC);

                break;


            case "БД MSSql":
                DbMSSqlLinkListUC dbMSSqlLinkListUC = new DbMSSqlLinkListUC(settingOper);
                panel1.Controls.Clear();
                panel1.Controls.Add(dbMSSqlLinkListUC);

                break;                    
        }
    }
    catch (Exception ex) 
    {

        string s = ex.Message;
        // throw;
    }

}

更新_1
在源代码中,我更改了ActivePanel(string nameCheck)中的值。
我在以下情况下进行了更改。
我来看一个示例:case "Список ссылок файлов HTML"

初始状态。
来源-“СписокссылокфайловHTML”。
案例-“СписокссылокфайловHTML”。
结果-“ switch”不适用于“СписокссылокфайловHTML”。

测试-1
来源-“列表文件”。
大小写-“列表文件”。
结果-“开关”适用于“列表文件”。

测试-2
来源-“СписокссылокфайловHTML”。
案例-“СписокссылокфайловHTML”。
结果-“ switch” 有效(!),用于“СписокссылокфайловHTML”。

我对所有“案例”进行了此类测试,然后对所有“案例”使用了“开关”。
即使是包含几个非英语单词的“ case”。
如果我没有对“ case”进行测试,那么“ case”不适用于非英语单词。

1 个答案:

答案 0 :(得分:2)

您的问题有两种可能的解释。

a)您期望“穿透”行为。如果您有一个案件,则以下所有案件均适用。我知道本机C ++有它。但是不幸的是,C#没有。这种行为需要省略中断的选项,但是您在C#中没有得到该选项。这是一个设计决定。

b)您正在使用非英语字符,因此正要进行标准化: “某些Unicode字符具有多个等效的二进制表示形式,包括组合的和/或复合的Unicode字符集。单个字符的多个表示形式的存在使搜索,排序,匹配和其他操作变得复杂。” https://docs.microsoft.com/en-us/dotnet/api/system.string.normalize?view=netframework-4.7.2

匹配-尤其是对于字符串实习-在二进制级别进行。而且,尽管两个字符串可能外观相同,但它们并不一定相同(二进制)。