2015-02-24 44 views
-3

有沒有更好的方法?如何避免重複的字典邏輯,並把它放在一個通用的方法?重因子重複詞典C#中的邏輯

enum department { IT, CSE, MECH, EEE, ECE } 
    Dictionary<department, decimal> collegeDepartmentDecimal = new Dictionary<department, decimal> 
    { 
     {department.IT, 1}, 
     {department.CSE, 45}, 
     {department.MECH, 66}, 
     {department.EEE, 72}, 
     {department.ECE, 75}, 
    }; 

    Dictionary<department, string> collegeDepartmentString = new Dictionary<department, string> 
    { 
     {department.IT, "YES"}, 
     {department.CSE, "NO"}, 
     {department.MECH, "NULL"}, 
     {department.EEE, "N/A"}, 
     {department.ECE, null}, 
    }; 

我爲此使用字典。

decimal d = ("something" == collegeDepartmentDecimal[collegeDepartmentDecimal.IT] ? collegeDepartmentString[collegeDepartmentDecimal.CSE] : "something"); 

請幫我解決這個問題。

+1

你到底是什麼問題解決,爲什麼你認爲使用泛型是答案? – 2015-02-24 15:19:46

+1

我懷疑你的問題可以通過[使用屬性](https://msdn.microsoft.com/en-us/library/aa288454(v = vs.71).aspx)更加優雅地解決。 – BCdotWEB 2015-02-24 15:37:06

+0

我應該更具體。錯字錯誤。不是泛型,只是泛型。現在,我修改了這個問題。 – Uba 2015-02-24 15:39:34

回答

3

使用泛型進行重構意味着什麼?

如果你想所有這些信息存儲在一個字典,你可以一)使用System.Tuple b)利用一些價值類型來存儲信息

一)

Dictionary<department, Tuple<decimal, string>> collegeDepartmentDecimalAndString = new Dictionary<department, Tuple<decimal, string>> 
{ 
    {department.IT, Tuple.Create(1m, "YES")}, 
    {department.CSE, Tuple.Create(45m, "NO")}, 
    {department.MECH, Tuple.Create(66m, "NULL")}, 
    {department.EEE, Tuple.Create(72m, "N/A")}, 
    {department.ECE, Tuple.Create(75m, "")}, 
}; 
+0

更新了我的問題。 – Uba 2015-02-24 16:09:48

+0

如何訪問字典中的第一項(item1)?十進制d =(「something」== beneficiaryDecimalAndStringDictionary [collegeDepartmentDecimal.IT]?beneficiaryDecimalAndStringDictionary [collegeDepartmentDecimal.CSE]:「something」); – Uba 2015-02-24 16:31:49

+0

字典中沒有「第一個」項,但是如果從IEnumerable的角度來看它,可以使用Enumerable.First或Enumerable.FirstOrDefault擴展方法 – Spo1ler 2015-02-24 16:34:15

0

您可以從Dictionary<TKey, TValue>類如下繼承:

public class MyDictionary<department, TValue> : Dictionary<department, TValue> 
{ 
    public MyDictionary() : base() { } 
    public MyDictionary(int capacity) : base(capacity) { } 
} 

然後用它作爲:

MyDictionary<department, decimal> dic1 = new MyDictionary<department, decimal>() { 
    {department.IT, 1}, 
    {department.CSE, 45}, 
    {department.MECH, 66}, 
    {department.EEE, 72}, 
    {department.ECE, 75} 
}; 
MyDictionary<department, string> dic2 = new MyDictionary<department, string>() { 
    {department.IT, "YES"}, 
    {department.CSE, "NO"}, 
    {department.MECH, "NULL"}, 
    {department.EEE, "N/A"}, 
    {department.ECE, ""} 
}; 
在你的代碼