索引一小部分值的正确方法

时间:2012-12-05 18:28:25

标签: c#

在将id传递给方法的情况下,执行以下操作的最佳方法是什么?案例陈述是好还是某种类似哈希表的集合更好?

private string GetCurrencySymbol(string code)
    {
        switch (code)
        {
            case "USD":
            case "AUD":
            case "CAD":
            case "NAD":
            case "NZD":
            case "SGD":
            case "HKD":
                return "$";
            case "GBP":
                return "£";
            case "NOK":
            case "DKK":
            case "SEK":
                return "kr";
            case "ZAR":
                return "R";
            case "JPY":
                return "¥";
            case "CHF":
                return "CHF";
            case "EUR":
                return "€";
            case "GHS":
                return "¢";
            case "BWP":
                return "P";
            case "INR":
                return "₹";
            case "KES":
                return "KSh";
            case "LSL":
                return "L";
            case "MUR":
                return "Rs";
            case "NGN":
                return "₦";
            case "MWK":
                return "MK";
            case "MZM":
                return "MT";
            case "PKR":
                return "Rs";
            case "PLN":
                return "zł";
            case "SZL":
                return "L";
            case "TZS":
                return "Sh";
            case "UGX":
                return "Sh";
            case "ZMK":
                return "ZK";
            default:
                return "";
        }
    }
这似乎闻到了一点味道?它不是经常访问的,但看起来有点冗长。

6 个答案:

答案 0 :(得分:5)

switch语句最终会被转换为Dictionary。对于更复杂的例子(例如这个例子)来说,直接去做是很有意义的。

Dictionary<string, string> currencyLookup = new Dictionary<string, string>();
currencyLookup["USD"] = "$";
//...

string currency = currencyLookup["INR"];

使用字典的一些优点:

  1. 如果要将所有选项定义为文字,则可能需要少量代码。 (特别是如果使用集合初始化器。)
  2. 您可以根据文件,数据库或其他外部源中的信息填充字典,以便需要在代码中定义所有映射。除了使代码更清晰外,还可以添加/删除/更改货币,而无需重新编译程序。
  3. 您可以访问ContainsKey之类的操作来了解特定键是否存在,而不是只返回一个空字符串(如果没有找到它(您仍可以这样做)。

答案 1 :(得分:1)

案例陈述在您的案件中是完美的。

答案 2 :(得分:1)

您可以使用

Dictionary<String, char>

但您仍然需要设置看起来类似的映射。

如果这一系列的键/值永远不会改变,那么使用像你在那里的case语句一样没有错。如果偶尔从其他类访问它,请将它粘贴在某个静态实用程序类中。

答案 3 :(得分:1)

除非您想要动态查找,否则switch通常至少会超过Dictionary(因为如果编译器认为性能更高,编译器将生成Dictionary

然而,最重要的指标是可用性,您认为代码在当前格式下是否可读?

或者作为旁注,您是否可以使用其他人的全球化方法为您执行此特定繁重工作?

答案 4 :(得分:1)

字典类更好。你可以把它放在帮手里。但是,由于它不经常使用,所以开关也不错。

答案 5 :(得分:1)

使用List<>Dictionary<,>对于这样的简单应用程序来说总是过度杀伤,除非您希望用户能够配置货币(在这种情况下我建议使用{ {1}} - 类)

你的switchcase对于这样的简单函数会很好,即使它看起来很粗糙。