Создать универсальный метод, ограничивающий t в перечисление ⇐ C#

Место общения программистов C#
Anonymous
Создать универсальный метод, ограничивающий t в перечисление

Сообщение Anonymous »

Я строю функцию для расширения концепции enum.parse < /code>, которая < /p>

позволяет анализировать значение по умолчанию, если значение перечисления не найдено < /li>
.

Код: Выделить всё

public static T GetEnumFromString(string value, T defaultValue) where T : Enum
{
if (string.IsNullOrEmpty(value)) return defaultValue;
foreach (T item in Enum.GetValues(typeof(T)))
{
if (item.ToString().ToLower().Equals(value.Trim().ToLower())) return item;
}
return defaultValue;
}
Я получаю ограничение ошибки, не может быть специальным классом System.enum .
Достаточно справедливо, но есть ли обходной путь, чтобы разрешить общий перечисление, или мне придется имитировать функцию Parse и передавать тип в качестве атрибута, который заставляет уродливое требование к вашему коду. 1 < /h2>
Я остановился (я оставил цикл, чтобы сохранить нечувствительность к случаю - я использую это при анализе XML) < /p>

Код: Выделить всё

public static class EnumUtils
{
public static T ParseEnum(string value, T defaultValue) where T : struct, IConvertible
{
if (!typeof(T).IsEnum) throw new ArgumentException("T must be an enumerated type");
if (string.IsNullOrEmpty(value)) return defaultValue;

foreach (T item in Enum.GetValues(typeof(T)))
{
if (item.ToString().ToLower().Equals(value.Trim().ToLower())) return item;
}
return defaultValue;
}
}
Редактировать 2: (16 февраля 2015 г.) Кристофер Керренс опубликовал общее решение для защитника типа в MSIL или F# ниже, которое стоит посмотреть, и UPVOTE. Я удалю это редактирование, если решение пузырит дальше вверх по странице.>

Подробнее здесь: https://stackoverflow.com/questions/791 ... to-an-enum

Вернуться в «C#»