什么是好的集合/容器用于基本存储具有多个穿透情况的switch语句的内容?我想,一个更准确的方法是,对于“多键一值”查找,什么是一个很好的C#解决方案?我检查了System.Collections命名空间及其相关的命名空间,但没有找到任何特别适合多键一值的内容。
最近,我自己编写了一个小型控制台程序,用于构建和验证我的Web应用程序所需的XML文件,以避免手动编写时出现的错误。但是对于初始版本,我硬编码了一些稍微可变的元素 - 特别是一些用于验证的字典和一个具有大量初级选项的大型switch语句。虽然这将在未来几个月内发挥作用,但最终可能需要更新这些硬编码元素,这些元素目前需要编辑源文件。为了避免这种情况,我决定将字典和switch语句信息存储在XML文件中(最终以可怕的递归趋势演变为编写程序以构建和验证那些我的XML文件)。现在,在将其存储在文件中时,当我检索数据时,我不能简单地重建switch语句,就像我可以使用字典一样。所以我只需要模拟switch语句的效果,这基本上意味着我需要几个“键”来引用相同的“值”。
switch语句中的示例代码段。此方法将特殊值输入转换为相应的ID,主要是为了节省试图记忆值的人类记忆空间。基本上如图所示,我想要一个容器来存储所有输出单个值的几个键。
private static string DiscernRegistrationId(string str)
{
string retVal = str;
switch (str.ToLowerKey()) //shortcut extension for str.Replace(" ","").Replace(".","").ToLowerInvariant()
{
case "computerpackage":
case "comppackage":
case "cpackage":
case "computerpkg":
case "comppkg":
case "cpkg":
retVal = "0x0100C73692D109C741A1B8846141B47519C8";
break;
case "mobilepackage":
case "mobpackage":
case "mpackage":
case "mobilepkg":
case "mobpkg":
case "mpkg":
retVal = "0x010081F753F0A4A5412CB6A8E9F8CD193F58";
break;
//More cases follow
}
return retVal;
}
答案 0 :(得分:3)
我会使用普通Dictionary<string, string>
并将所有连贯案例指向同一个string
对象。
答案 1 :(得分:1)
我认为您最好的选择是坚持使用其中一个内置IDictionary<>
类并重复这些值。在这种情况下,我实际上会推荐SortedDictionary<>
,因为它按键按顺序存储项目。如果您需要以与switch语句具有相同视觉外观的方式打印出键,那将非常有用。
多次存储这些值应该不是问题,因为它们是作为引用类型的字符串。当然,你会对同一个字符串有重复的引用,但它不像你复制整个字符串的内容或任何东西。
另一点需要指出的是,我相信编译器实际上是在后台将该switch语句转换为哈希表。这意味着它可能正在使用我刚推荐的相同策略。拆开它看看。