2015-02-24 45 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, ""} 
}; 
在你的代码