2010-11-11 69 views
3

我經常遇到一種情況,我想要一組鍵/值對。下面是一個僞代碼的想法:需要一個很好的方法來存儲名稱值對

DataSet MyRequestStatus 
{ 
    Accepted = "ACC", 
    Rejected = "REJ" 
} 

用法:

InsertIntoTable(MyRequestStatus.Accepted.ToString()) 

我希望能夠爲使用友好的「MyRequestStatus.Accepted」,但我想的toString()方法返回神祕的「ACC 「, 不接受」。獎勵點,隱式轉換,而不必調用ToString()。

我還沒有找到一個明顯的方法來實現這與枚舉。你有什麼建議?

+0

將字符串值設置爲「Accepted」? – 2010-11-11 14:43:41

+0

我不確定我是否理解,你在尋找一種將'MyRequestStatus.Accepted'枚舉值映射到字符串'「ACC」'的方法嗎? – 2010-11-11 14:45:20

+0

@格拉漢克拉克是的 – 2010-11-11 14:47:40

回答

5
public static class MyRequestStatus 
{ 
    public const string Accepted = "ACC", 
         Rejected = "REJ"; 
} 
+0

+1:這是我第一次看到你的答案,我明白他真正要求什麼;) – 2010-11-11 14:51:43

+0

太棒了。謝謝! – 2010-11-11 14:55:14

0

試試這個

public struct MyRequestStatus 
{ 
    public static string Accepted = @"ACC"; 
    public static string Rejected = @"REJ"; 
} 
0
using System; 
using System.Collections.Generic; 

class Program 
{ 
    static void Main() 
    { 
     Dictionary<string, string> d = new Dictionary<string, string>(); 
     d.Add("Accepted", "ACC"); 
     d.Add("Rejected", "REJ"); 

     string r = d["Rejected"]; 
    } 
} 

現在你擁有了整個字典API一起工作。

+0

你可以使用'StringDictionary'而不是'Dictionary ' - 節省你一些輸入。 – ThiefMaster 2010-11-11 14:51:56

+0

不,OP仍然必須鍵入單詞「拒絕」來獲得「REJ」。我認爲OP想要完全避免字符串文字並堅持使用符號。另外,我認爲OP想要一個實際的類型。 – FrustratedWithFormsDesigner 2010-11-11 14:52:27

+0

因此被拒絕而不是「被拒絕」......知道了 – Tim 2010-11-11 15:00:24

0

或者使用與常量字符串類由Marc Gravell的建議,或者如果你想保持枚舉,建立一個靜態的字典包含的映射:

private static Dictionary<MyRequestStatus, string> requestStatusToString = 
    new Dictionary<MyRequestStatus, string>() 
{ 
    { MyRequestStatus.Accepted, "ACC" }, 
    { MyRequestStatus.Rejected, "REJ" } 
}; 

然後,你可以這樣做:

MyRequestStatus status = MyRequestStatus.Accepted; 
string code = requestStatusToString[status]; 
相關問題