2014-03-12 42 views
1

我想諮詢一下。我的項目有很多不同值的equals方法,並且我想要做一個相同的方法。建議 - 如何實現具有不同參數的相同代碼

的方法是這樣的:

private void Enum1() 
{ 
    Console.WriteLine(Enum.GetValue(ENUM1.Code)); 
    Console.WriteLine(Enum.GetValue(ENUM1.Info)); 
} 

private void Enum2() 
{ 
    Console.WriteLine(Enum.GetValue(ENUM2.Code)); 
    Console.WriteLine(Enum.GetValue(ENUM2.Info)); 
} 

private void Enum3() 
{ 
    Console.WriteLine(Enum.GetValue(ENUM3.Code)); 
    Console.WriteLine(Enum.GetValue(ENUM3.Info)); 
} 

這是枚舉:

public enum ENUM1 
{ 
    Code = 1, 
    Info = 3 
} 

public enum ENUM2 
{ 
    Code = 91, 
    Info = 4 
} 

public enum ENUM3 
{ 
    Code = 6, 
    Info = 27 
} 

只有一種方式來創建通過將枚舉的輸入類型的使用方法?也許這樣一個類似的解決方案:

private void General("ENUM1") 
{ 
    var type = ENUM1; 

    switch (p) 
    { 
     case "ENUM1": 
      type = ENUM1; 
     case "ENUM2": 
      type = ENUM2; 
     case "CASALINGHI": 
      type = ENUM3; 

     default: 
      type = ENUM1; 
     } 

    Console.WriteLine(Enum.GetValue(type.Code)); 
    Console.WriteLine(Enum.GetValue(type.Info)); 
} 
+1

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+2

我不認爲枚舉是這裏的最佳選擇。考慮用屬性'code'和'info'來創建一個類或結構體。然後你所有的不同的枚舉可以表示爲同一個類的實例;你可以簡單地創建一個方法yourclass.writeToConsole(),它可以完成和我所知道的所有靜態方法 – HugoRune

+0

一樣的功能,但是我使用它,因爲實際上每個枚舉都有它的字符串值'StringValue(「n | 11:5 | 0」 )]代碼= 1,' – puti26

回答

2

我覺得這樣的事情是你在找什麼:

private void General<T>() 
{ 
    var values = Enum.GetValues(typeof(T)); 
    foreach(var value in values) 
     Console.WriteLine(value); 
} 

General<Enum1>(); 
General<Enum2>(); 
General<Enum3>(); 

還是這個,這取決於你想如何使用它:

private void General(Type enumType) 
{ 
    var values = Enum.GetValues(enumType); 
    foreach(var value in values) 
     Console.WriteLine(value); 
} 

General(typeof(Enum1)); 
General(typeof(Enum2)); 
General(typeof(Enum3)); 
+0

和參數?我必須有一個參數來選擇哪個ENUM(ENUM1,ENUM2,ENUM3)打印。 – puti26

+0

您可以選擇。是類型參數。 –

0

當你可以很容易地使用類時,爲什麼你繼續使用枚舉?閱讀更多關於面向對象編程。

創建一個類:

public class MyEnum 
{ 
    public int Code 
    { 
     get; set; 
    } 
    public int Info 
    { 
     get; set; 
    } 

    public string Display() 
    { 
     Console.WriteLine(this.Code); 
     Console.WriteLine(this.Info) 
    } 

    // 
    // This will keep your enums static, available from any method 
    // 
    private static List<MyEnum> _globals = new List<MyEnum(); 

    public static List<MyEnum> Globals() 
    { 
     if (this._globals.Count == 0) 
     { 
      this._globals.Add(new MyEnum(){ Code = 1, Info = 3 }); 
      this._globals.Add(new MyEnum(){ Code = 91, Info = 4 }); 
      this._globals.Add(new MyEnum(){ Code = 6, Info = 27 }); 
     } 

     return this._globals; 
    } 
} 

這之後,您可以輕鬆打印出所有的枚舉用下面的代碼:

foreach (MyEnum* en in MyEnum.Globals()) 
{ 
    en.Display(); 
} 

請考慮類似於這樣一個解決方案,因爲你的枚舉的顯然代表一些數據。

相關問題