3

在将 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 "";
        }
    }

这个好像有点味道?它并不经常访问,但似乎有点冗长。

4

6 回答 6

5

声明最终将switch被翻译成Dictionary最终。对于更复杂的示例(例如这个),直接进入该示例通常是有意义的。

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

string currency = currencyLookup["INR"];

使用字典的一些优点:

  1. 如果您想将所有选项定义为文字,它可能需要更少的代码。(特别是如果使用集合初始化器。)
  2. 您可以根据文件、数据库或其他外部源中的信息填充字典,这样您无需在代码中定义所有映射。除了使代码更简洁之外,这还允许您添加/删除/更改货币,而无需重新编译您的程序。
  3. 您可以访问诸如ContainsKey了解特定键是否存在的操作,而不是在未找到时仅返回空字符串(您仍然可以这样做)。
于 2012-12-05T18:32:06.830 回答
1

案例陈述在您的情况下是完美的。

于 2012-12-05T18:31:03.850 回答
1

你可以使用一个

Dictionary<String, char>

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

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

于 2012-12-05T18:31:06.880 回答
1

除非您想要动态查找,否则 aswitch通常至少会击败 a Dictionary(因为编译器会生成 aDictionary如果它认为它会更高效)

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

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

于 2012-12-05T18:31:30.653 回答
1

字典类更好。你可以把它放在助手中。但是,由于它不经常使用,因此开关还不错。

于 2012-12-05T18:31:44.730 回答
1

除非您希望用户能够配置货币(在这种情况下,我建议使用-class) ,否则对于这样的简单应用程序,使用List<>or将是完全过大的。Dictionary<,>Dictionary<,>

即使看起来很粗糙,您的开关柜也可以很好地完成像这样的简单功能。

于 2012-12-05T18:33:12.420 回答