c# - switch语句 - switch case js




将硬编码的switch语句转换为动态加载的many-keys-one-value查找 (2)

什么是一个好的收集/容器,用于基本上存储一个交换语句的内容与多个fallthrough情况? 我想,更准确的方法是,“多键一值”查找有什么好的C#解决方案? 我通过System.Collections命名空间及其关联的命名空间进行了检查,但没有发现任何特别针对多键一值的东西。

最近,我写了一个小的控制台程序来构建和验证我的Web应用程序所需的XML文件,以避免手动编写时发生的错误。 但是对于最初的版本,我硬编码了一些略有变化的元素 - 特别是一些用于验证的字典和一个大的switch语句,它们有一套大量的fallthrough选项。 尽管这将在未来几个月内运行,但最终可能需要更新这些硬编码元素,而这些元素目前需要编辑源文件。 为了避免这种情况,我决定将字典和开关语句信息存储在一个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;
}

我将使用普通的Dictionary<string, string>并将所有的贯通情况都指向同一个string对象。


我认为你最好的选择是坚持一个内置的IDictionary<>类,只是复制值。 在这种情况下,我实际上会推荐一个SortedDictionary<> ,因为它按键顺序存储项目。 如果您需要以与switch语句相同的视觉外观的方式打印键,那将会非常有用。

因为它们是引用类型的字符串,所以多次存储值不应该成为问题。 当然,你会有重复的引用到同一个字符串,但它不像你是复制整个字符串的内容或任何东西。

另外要指出的是,我相信编译器实际上是在后台把这个switch语句转换成hashtable。 这意味着它可能使用我刚刚推荐的相同策略。 拆开它,看看。





key-value