Это может помочь вам преобразовать любые входные данные в желаемое пользователем enum . Предположим, у вас есть перечисление как ниже, которое по умолчанию int . Пожалуйста, добавьте значение Default в начале вашего перечисления. Используется у помощников medthod, если не найдено совпадений с входным значением.
public enum FriendType
{
Default,
Audio,
Video,
Image
}
public static class EnumHelper<T>
{
public static T ConvertToEnum(dynamic value)
{
var result = default(T);
var tempType = 0;
//see Note below
if (value != null &&
int.TryParse(value.ToString(), out tempType) &&
Enum.IsDefined(typeof(T), tempType))
{
result = (T)Enum.ToObject(typeof(T), tempType);
}
return result;
}
}
N.B: Здесь я пытаюсь разобрать значение в int, потому что enum по умолчанию int
Если вы определили enum следующим образом: byte type.
public enum MediaType : byte
{
Default,
Audio,
Video,
Image
}
Вам нужно изменить метод синтаксического анализа с
int.TryParse(value.ToString(), out tempType)
до
byte.TryParse(value.ToString(), out tempType)
Я проверяю свой метод на наличие следующих входных данных
EnumHelper<FriendType>.ConvertToEnum(null);
EnumHelper<FriendType>.ConvertToEnum("");
EnumHelper<FriendType>.ConvertToEnum("-1");
EnumHelper<FriendType>.ConvertToEnum("6");
EnumHelper<FriendType>.ConvertToEnum("");
EnumHelper<FriendType>.ConvertToEnum("2");
EnumHelper<FriendType>.ConvertToEnum(-1);
EnumHelper<FriendType>.ConvertToEnum(0);
EnumHelper<FriendType>.ConvertToEnum(1);
EnumHelper<FriendType>.ConvertToEnum(9);
извините за мой английский