c# - 我需要一个辅助方法来比较一个 char 枚举和一个 char 盒装到一个对象

标签 c# enums casting

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

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 个并且为它们编写相同的方法至少可以说是烦人的。 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' };

关于c# - 我需要一个辅助方法来比较一个 char 枚举和一个 char 盒装到一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/105609/

相关文章:

c# - 从 App.OnStartup 调用异步 Web API 方法

python - 如何子类化 Django TextChoices 以添加其他属性?

swift - 从枚举中获取关联值,无需 switch/case

c# - 第二次打开控制台后尝试调用 Console.Clear() 时出现异常

c# - 最小起订量一个类中只有一个方法

objective-c - 将 "const void *"转换为 "const char *"

将具有两列的data.frame reshape 为具有数据的多列(R)

mysql - 我如何在 MySQL 5.1 中将一个 int 转换为一个位?

c# - 终止使用特定图像路径的进程

java - 在 hibernate 中将枚举映射到字符串