2

我有一个如下所示的枚举:

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 但不是多态的东西吗?

4

4 回答 4

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' };
于 2008-09-19T21:53:59.033 回答
0

枚举在 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真的是一个对象,或者您是否可以安全地将其转换为字符串。

于 2008-09-19T21:16:22.320 回答
-1

我会看看 Enum.Parse。它会让你将你的 char 解析回正确的枚举。我相信它可以一直追溯到 C# 1.0。你的代码看起来有点像这样:

TransactionStatus status = (TransactionStatus)Enum.Parse(typeof(TransactionStatus), obj.ToString());
于 2008-09-19T21:08:16.583 回答
-2

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

protected bool CharEnumEqualsCharObj(TransactionStatus enum_status, object obj_status) {
    return (char)enum_status == (char)obj_status;
}
于 2008-09-19T21:29:33.973 回答