在将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 "";
}
}
这似乎闻到了一点味道?它不是经常访问的,但看起来有点冗长。
答案 0 :(得分:5)
switch
语句最终会被转换为Dictionary
。对于更复杂的例子(例如这个例子)来说,直接去做是很有意义的。
Dictionary<string, string> currencyLookup = new Dictionary<string, string>();
currencyLookup["USD"] = "$";
//...
string currency = currencyLookup["INR"];
使用字典的一些优点:
ContainsKey
之类的操作来了解特定键是否存在,而不是只返回一个空字符串(如果没有找到它(您仍可以这样做)。答案 1 :(得分:1)
案例陈述在您的案件中是完美的。
答案 2 :(得分:1)
您可以使用
Dictionary<String, char>
但您仍然需要设置看起来类似的映射。
如果这一系列的键/值永远不会改变,那么使用像你在那里的case语句一样没有错。如果偶尔从其他类访问它,请将它粘贴在某个静态实用程序类中。
答案 3 :(得分:1)
除非您想要动态查找,否则switch
通常至少会超过Dictionary
(因为如果编译器认为性能更高,编译器将生成Dictionary
)
然而,最重要的指标是可用性,您认为代码在当前格式下是否可读?
或者作为旁注,您是否可以使用其他人的全球化方法为您执行此特定繁重工作?
答案 4 :(得分:1)
字典类更好。你可以把它放在帮手里。但是,由于它不经常使用,所以开关也不错。
答案 5 :(得分:1)
使用List<>
或Dictionary<,>
对于这样的简单应用程序来说总是过度杀伤,除非您希望用户能够配置货币(在这种情况下我建议使用{ {1}} - 类)
你的switchcase对于这样的简单函数会很好,即使它看起来很粗糙。