2010-04-29 58 views
1

我有一種情況,我正在尋找更優雅的解決方案。代表一個給出多個值的相同值(C#3.0)

考慮以下情況

"BKP","bkp","book-to-price" (will represent) BOOK-TO-PRICE 

"aop","aspect oriented program" (will represent) ASPECT-ORIENTED-PROGRAM 

即如果用戶輸入BKP或BKP或賬面價格,程序應該把它看成賬面價格。第二個示例(面向方面​​的程序)也是如此。

我有以下解決方案:

解決方案:

if (str == "BKP" || str == "bkp" || str == "book-to-price") return "BOOK-TO-PRICE". 

但我認爲,可以有許多其他更好的解決方案。

難道你的人,請給一些建議。(用一個例子會更好)

我使用C#3.0和DOTNET框架3.5

回答

3

我會考慮使用一個Dictionary<string,string>,也許從配置填充文件或數據庫表,帶有規範名稱關係的別名。使用不區分大小寫的鍵比較器。例如,

var map = new Dictionary<string,string>(StringComparer.OrdinalIgnoreCase); 
map.Add("bkp", "BOOK-TO-PRICE"); 
map.Add("book-to-price", "BOOK-TO-PRICE"); 
map.Add("aop", "ASPECT-ORIENTED-PROGRAM"); 
map.Add("aspect oriented program", "ASPECT-ORIENTED-PROGRAM"); 

然後你只需要給出,關鍵做一個O(1)查找,找到規範名稱。

var name = map["bkp"]; 
+1

這幾乎是我會推薦的。 – Tejs 2010-04-29 02:51:06

+0

是的,這裏也一樣;因爲字符串是不可變的,所以沒有存儲開銷(與其他方法相比,即使字符串很大),就像C中會存在的那樣。 – 2010-04-29 03:25:42