Создать универсальный метод, ограничивающий 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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