2012-09-14 38 views
0

我有以下代碼:如何避免已知鍵輸入字符串在C#

switch(first) 
{ 
    case 'A': 
     vm.Content = contentService.Get("0001000", vm.RowKey); 
     return View("Article", vm); 
    case 'F': 
     vm.Content = contentService.Get("0002000", vm.RowKey); 
     return View("FavoritesList", vm); 
} 

「A」是指一個網頁類型的文章與一鍵「0001000」 「F」是指一個頁面類型的收藏夾,密鑰爲「0002000」

有沒有在C#中的方式,我可以避免必須在密鑰中作爲字符串編碼? 有些方法可以讓我用關鍵縮寫或名稱 進行編碼,然後讓C#將它轉換爲字符串?

我可以爲此使用Enum嗎?這似乎是理想的,但我不知道如何設置一個枚舉。

+0

是的,你可以參考一下他們​​。看看我的答案。 – Jan

回答

1

您可以使用枚舉並使用擴展方法來允許替代文本輸出。

枚舉:

public enum PageTypes 
{ 
    A, 
    F 
} 

擴展方法(需要在你的項目的頂層):

public static class Extensions 
{ 
    public static string getText(this PageTypes type) 
    { 
     switch (type) 
     { 
      case PageTypes.A: 
       return "0001000"; 
      case PageTypes.F: 
       return "0002000"; 
      default: 
       return null; 
     } 
    } 
} 

並且代碼:

PageTypes type; 
//assing value to type: 
//type = ... 
var vm.Content = contentService.Get(type.getText(), vm.RowKey); 
switch (type) 
{ 
    case PageTypes.A:    
     return View("Article", vm); 
    case PageTypes.F: 
     return View("FavoritesList", vm); 
} 

現在你不需要使用字符串來檢索值。

3

你可能想到的字典(如果我正確理解你的問題)

//class for holding relation between the code and page name 
public class Data 
{ 
    public string Code {get;set;} 
    public string PageName {get;set;} 
} 

var dic = new Dictionary<string, Data >{ 
      {"A", new Data{Code="0001000", PageName = "Article"}, 
      {"F", newe Data{Code="0002000", PageName="FavoritesList"} 
} 

使用後它喜歡:

Data dt = null; 
if(dic.TryGetValue(first, out dt)) { // *first* is parameter you use in switch 
    vm.Content = contentService.Get(dt.Code, vm.RowKey); 
    return View(dt.PageName, vm); 
} 
+0

但是'first'仍然是一個字符串。根據這個問題,這正是她想要避免的。 – Jan

+0

@Jan:**某處**你必須定義字符串。在提供的例子中,你可以避免在不同的地方對它們進行硬編碼,但在字典中只有*。之後,該字典*可能會從某個配置文件或某個其他來源填充​​,但這遠離這個問題的主題,即imo。 – Tigran

+0

是的,你必須定義它們。但在你的例子中,你必須實際使用它們來引用該值。當你使用枚舉時,你不必**使用字符串。這是這個問題明確要求的。 – Jan

0

我把鑰匙放在了一本字典,例如

var keyData = new Dictionary(char,string); 
keyData.Add('A',"0001000"); 

keyData.Add('A',"0001000"); 
keyData.Add('F',"0002000"); 

然後,您可以使用

var value = keyData['A']; 
+0

它仍然使用字符串來檢索值 – Jan

+0

是的。 +1對於@Tigran的解決方案,絕對是最優雅的。 –