我有一个这种类型的枚举
public enum MyEnum
{
Private = '1',
Public = '2',
Manual = '3'
}
数据库将MyEnum的值存储为“1”,“2”,“3”作为字符串。
我尝试编写一些给定输入字符串值的代码失败,将返回匹配的Enum,如:
var inputString = '2';
MyEnum result = ConvertStringToMyEnum(inputString);
如果inputString无效,请抛出异常或以某种方式让我知道它不是有效值。
答案 0 :(得分:3)
你可以像这样在你的枚举中输入一个字符:
var enumValue = (MyEnum)"2"[0];
并检查它是否是有效的枚举值:
var isValid = Enum.IsDefined(typeof(MyEnum), enumValue);
答案 1 :(得分:1)
public static T ToEnum< T >(string @string)
{
if (string.IsNullOrEmpty(@string))
{
throw new ArgumentException("Argument null or empty");
}
if (@string.Length > 1)
{
throw new ArgumentException("Argument length greater than one");
}
return (T)Enum.ToObject(typeof(T), @string[0]);
}
更多信息可以在这里找到: https://www.codeproject.com/Articles/78600/C-Enum-with-Char-Valued-Items
答案 2 :(得分:1)
我建议使用Enum
获取所有有效值:字符串value
有效当且仅当
1. `value` is of length `1`
2. `MyEnum` declares `value[0]` as valid value
实施:
string value = "1";
if (!string.IsNullOrEmpty(value) &&
value.Length == 1 &&
Enum.GetValues(typeof(MyEnum)).Cast<int>().Any(item => item == value[0])) {
Console.WriteLine("Valid");
}
修改:如果要检查许多 value
,请缓存有效的
static HashSet<int> s_Valids = new HashSet<int>(Enum
.GetValues(typeof(MyEnum))
.Cast<int>());
...
string value = "1";
if (!string.IsNullOrEmpty(value) &&
value.Length == 1 &&
s_Valids.Contains(value[0])) {
Console.WriteLine("Valid");
}
答案 3 :(得分:0)
您需要先解析:
var returnValue = MyEnum.Default;
if (int.TryParse(dbString), out int intValue)
{
returnValue = (MyEnum)intValue;
}
return returnValue
对于前C#6
var returnValue = MyEnum.Default;
int intValue;
if (int.TryParse(dbString), out intValue)
{
returnValue = (MyEnum)intValue;
}
return returnValue