使用char值验证枚举

时间:2017-08-17 08:51:07

标签: c# enums

我有一个这种类型的枚举

public enum MyEnum
{
    Private = '1',
    Public = '2',
    Manual = '3'
}

数据库将MyEnum的值存储为“1”,“2”,“3”作为字符串。

我尝试编写一些给定输入字符串值的代码失败,将返回匹配的Enum,如:

var inputString = '2';
MyEnum result = ConvertStringToMyEnum(inputString);

如果inputString无效,请抛出异常或以某种方式让我知道它不是有效值。

4 个答案:

答案 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