我需要一个辅助的方法来比较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' };
我会看看Enum.Parse。它会让你解析你的字符回适当的枚举。我相信它可以一直回到C#1.0。您的代码看起来有点像这样:使用.NET 2.0的普通包裹泛型的语法,以避免写出这样拙劣的代码,以便当
TransactionStatus status = (TransactionStatus)Enum.Parse(typeof(TransactionStatus), obj.ToString());
对不起,我不明白这一点 - 这将如何帮助?我现在要比较两个枚举,这很好,但是辅助方法的签名是什么? – 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是否真的是一个对象,或者您是否可以安全地将其转换为字符串。
这让我仍然不得不一遍又一遍地重写这个函数,尽管所有的东西都是从Enum继承而来的! – 2008-09-19 21:19:59
如果你只是要比较的值,可以使用类似:
protected bool CharEnumEqualsCharObj(TransactionStatus enum_status, object obj_status) {
return (char)enum_status == (char)obj_status;
}
这a)没有解决我对方法签名的担忧,b)由于无法将对象转换为字符,因此不会编译 – 2008-09-19 21:32:11
先生,我鼓掌称赞,我不太清楚为什么该方法签名在我的一直试图没有,但你是真棒。 – 2008-09-19 22:06:32