1

什么是一个好的集合/容器,用于基本上存储具有多个失败情况的 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;
}
4

2 回答 2

3

我会使用普通Dictionary<string, string>的并将所有的失败案例指向同一个string对象。

于 2010-05-27T13:35:00.827 回答
1

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

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

要指出的另一件事是,我相信编译器实际上是在幕后将该 switch 语句转换为哈希表。这意味着它可能使用了我刚刚推荐的相同策略。拆开看看。

于 2010-05-27T13:41:02.890 回答