好的,所以我有一个 char(1) 类型的数据库字段,其中包含少量可能的状态代码(例如,'F'= Failure,'U'=Unknown 等)。我想要一个对应于这些状态的 C# 枚举类。我可以:
public enum StatusCode : byte {
Unknown = (byte) 'U',
Failure = (byte) 'F',
// etc.
}
到现在为止还挺好。但是在从数据库返回的DataTable中,列值是System.Data.SqlTypes.SqlString实例。从 C# 字符串(甚至 C# 字符)转换为 C# 字节(因为 C# 字符实际上是 UTF-16 代码点)显然存在一些问题。但是在这种情况下,我知道这些值被限制在一个小集合中,如果这个集合之外的值通过,代码应该抛出异常。
考虑到这一点,最好的方法是什么?从 SqlString 转换为字节是否安全?Convert.ToByte() 会更好吗?简单地使用 switch/case 构造将值交叉进入枚举会更好吗?
我正在寻找“最好的”方法来做到这一点,不仅是为了获得正确的结果,而且是为了代码的清晰度。我想我也可以只使用一些常量,比如
public const char UnknownStatus = 'U';
public const char FailureStatus = 'F';
但如果可能的话,我宁愿使用枚举。有什么想法吗?
编辑:为了澄清我想要做什么,我希望在我的代码中经常使用这些值。例如,我希望能够执行以下操作:
public void DoSomething(StatusCode currentStatus) {
if(currentStatus == StatusCode.Failure) {
throw new SomeException();
}
switch(currentStatus) {
case StatusCode.Unknown:
// do something
break;
}
}
等等。我特别想避免这样的事情:
public void DoSomething(char currentStatus) {
if(currentStatus == 'F') {
// do something
}
}
因为在这种情况下,我到处都在使用相当于“魔术数字”的东西。特别是,这将使迁移到其他一些状态标记系统几乎是不可能的。那有意义吗?