我检查了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”不适用于非英语单词。
答案 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
匹配-尤其是对于字符串实习-在二进制级别进行。而且,尽管两个字符串可能外观相同,但它们并不一定相同(二进制)。