繁体   English   中英

我需要一个辅助方法来比较char Enum和装箱到对象的char

[英]I need a helper method to compare a char Enum and a char boxed to an object

我有一个看起来如下的枚举:

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

而且我正在从数据库中提取一个字符,该字符指示-您猜对了-是“ O”表示交易已打开还是“ C”表示交易已关闭。

现在,因为数据是作为对象从数据库中发出的,所以我很难编写比较代码。

我能做的最好的就是写:

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

但是,这不是我必须处理的唯一字符枚举,我有5或6个字符,为他们编写相同的方法至少可以说令人讨厌。 假设所有枚举都继承自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' };

在C#中,枚举通常比较凌乱,因此在使用.NET 2.0时,它的通用用法是用泛型包装语法,以避免不得不编写此类笨拙的代码。

在.NET 1.1中,您可以执行以下操作,尽管它不如原始代码段那么整洁:

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

这大约是相同数量的代码,但是您现在正在执行枚举而不是字符串比较。

您还可以使用调试器/文档查看obj_status是否确实是一个对象,或者是否可以安全地将其obj_status转换为字符串。

我来看看Enum.Parse。 它可以让您将char解析回适当的枚举。 我相信它可以一直回到C#1.0。 您的代码看起来像这样:

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

如果您只需要比较值,则可以使用以下方法:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM