我需要一个辅助的方法来比较char枚举和一个char装箱为对象

我需要一个辅助的方法来比较char枚举和一个char装箱为对象

问题描述:

我有如下所示的枚举:我需要一个辅助的方法来比较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继承的整个枚举,但不是多态的东西?

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

我会看看Enum.Parse。它会让你解析你的字符回适当的枚举。我相信它可以一直回到C#1.0。您的代码看起来有点像这样:使用.NET 2.0的普通包裹泛型的语法,以避免写出这样拙劣的代码,以便当

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

对不起,我不明白这一点 - 这将如何帮助?我现在要比较两个枚举,这很好,但是辅助方法的签名是什么? – 2008-09-19 21:18:34

枚举在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

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

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