2008-09-19 55 views
2

我有如下所示的枚舉:我需要一個輔助的方法來比較char枚舉和一個char裝箱爲對象

public enum TransactionStatus { Open = 'O', Closed = 'C'}; 

,我從數據庫中使用單個字符提取數據顯示 - 你猜對了 - 交易是開放還是交易關閉。

現在因爲數據作爲對象從數據庫中出來,所以我有時間寫比較代碼。

我能做的最好是寫:

protected bool CharEnumEqualsCharObj(TransactionStatus enum_status, object obj_status) { 
    return ((char)enum_status).ToString() == obj_status.ToString(); 
} 

然而,這不是唯一的字符枚舉,我不得不處理,我有5個或6和書面方式同樣的方法對他們來說是煩人至少可以說。 Supposedly all enums inherit from System.Enum但如果我嘗試將其設置爲輸入類型,則會出現編譯錯誤。這也在.NET 1.1中,所以泛型不可能出現問題。

我一直在努力這一段時間。有沒有人有更好的方法來寫這種方法?此外,任何人都可以澄清從System.Enum繼承的整個枚舉,但不是多態的東西?

回答

4
static void Main(string[] args) 
    { 
     object val = 'O'; 
     Console.WriteLine(EnumEqual(TransactionStatus.Open, val)); 

     val = 'R'; 
     Console.WriteLine(EnumEqual(DirectionStatus.Left, val)); 

     Console.ReadLine(); 
    } 

    public static bool EnumEqual(Enum e, object boxedValue) 
    {       
     return e.Equals(Enum.ToObject(e.GetType(), (char)boxedValue)); 
    } 

    public enum TransactionStatus { Open = 'O', Closed = 'C' }; 
    public enum DirectionStatus { Left = 'L', Right = 'R' }; 
+0

先生,我鼓掌稱讚,我不太清楚爲什麼該方法簽名在我的一直試圖沒有,但你是真棒。 – 2008-09-19 22:06:32

-1

我會看看Enum.Parse。它會讓你解析你的字符回適當的枚舉。我相信它可以一直回到C#1.0。您的代碼看起來有點像這樣:使用.NET 2.0的普通包裹泛型的語法,以避免寫出這樣拙劣的代碼,以便當

TransactionStatus status = (TransactionStatus)Enum.Parse(typeof(TransactionStatus), obj.ToString()); 
+0

對不起,我不明白這一點 - 這將如何幫助?我現在要比較兩個枚舉,這很好,但是輔助方法的簽名是什麼? – 2008-09-19 21:18:34

0

枚舉在C#中一般凌亂。

在.NET 1.1,你可以不喜歡下面的,雖然它不是比原來的片段整潔得多:

 protected bool CharEnumEqualsCharObj(TransactionStatus enum_status, object obj_status) 
     { 
      return (enum_status == Enum.Parse(typeof(TransactionStatus), obj_status.ToString())); 
     } 

這是大約相同數量的代碼,但你現在正在做的枚舉,而不是串比較。

您也可以使用調試器/文檔來查看obj_status是否真的是一個對象,或者您是否可以安全地將其轉換爲字符串。

+0

這讓我仍然不得不一遍又一遍地重寫這個函數,儘管所有的東西都是從Enum繼承而來的! – 2008-09-19 21:19:59

-2

如果你只是要比較的值,可以使用類似:

protected bool CharEnumEqualsCharObj(TransactionStatus enum_status, object obj_status) { 
    return (char)enum_status == (char)obj_status; 
} 
+0

這a)沒有解決我對方法簽名的擔憂,b)由於無法將對象轉換爲字符,因此不會編譯 – 2008-09-19 21:32:11