我需要一个帮助器方法来比较一个char Enum和一个盒子对象的char

StackOverflow https://stackoverflow.com/questions/105609

  •  01-07-2019
  •  | 
  •  

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

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

我会看看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归因
不隶属于 StackOverflow
scroll top