c# - 将硬编码的 switch 语句转换为动态加载的多键一值查找

标签 c# switch-statement containers key-value

用于基本存储具有多个 fallthrough 情况的 switch 语句的内容的好的集合/容器是什么?我想,更准确的方法是,什么是“多键一值”查找的良好 C# 解决方案?我检查了 System.Collections 命名空间及其关联的命名空间,但没有发现任何特别适合多键一值的内容。

最近,我为自己编写了一个小型控制台程序来构建和验证我的 Web 应用程序所需的 XML 文件,以避免手动编写时出现的错误。但是对于初始版本,我硬编码了许多稍微可变的元素——特别是一些用于验证的字典和一个具有大量 fallthrough 选项的大型 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;
}

最佳答案

我会用普通的Dictionary<string, string>并将所有失败案例指向相同的 string目的。

关于c# - 将硬编码的 switch 语句转换为动态加载的多键一值查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2921158/

相关文章:

c++ - 开关语句(字符串)继续选择默认值,除非它为零

java - if/else 和 switch 语句的问题

ios - 在 ios 6 中,如何在持有 'Container View' 对象的 View Controller 和嵌入其中的 TableView Controller 之间使用传递数据?

c# - 一段时间后在 azure 服务总线上重试消息?

c# - 如何抑制 thread.abort() 错误 C#?

c# - WebBrowser 导航功能不起作用,并且未调用处理程序

带开关的Android自定义弹出菜单

CSS水平规则为全宽并调整为屏幕尺寸

c++ - 根据特定数据对字符串进行排序的最佳方法是什么

c# - 如何在条形图中制作多行数据标签?