У меня странный вопрос о разборе перечислений из строк. Как бы то ни было, моему приложению необходимо обрабатывать несколько перечислений из файла конфигурации. Однако я не хочу писать процедуры синтаксического анализа для каждого типа перечисления (поскольку их много).
Проблема, с которой я столкнулся, заключается в том, что следующий код показывает какую-то странную ошибку: тип T должен быть типом значения, не допускающим значение NULL, или чем-то в этом роде. Я думал, что перечисления по умолчанию не обнуляемые?
Если я ограничу тип T
с помощью where T : enum
, все остальное внутри тела метода (кроме оператора if Enum.TryParse
) будет подчеркнуто как ошибка.
Может ли кто-нибудь помочь с этой странной мизерной проблемой?
Спасибо, Мартин
public static T GetConfigEnumValue<T>(NameValueCollection config,
string configKey,
T defaultValue) // where T : enum ?
{
if (config == null)
{
return defaultValue;
}
if (config[configKey] == null)
{
return defaultValue;
}
T result = defaultValue;
string configValue = config[configKey].Trim();
if (string.IsNullOrEmpty(configValue))
{
return defaultValue;
}
//Gives me an Error - T has to be a non nullable value type?
if( ! Enum.TryParse<T>(configValue, out result) )
{
result = defaultValue;
}
//Gives me the same error:
//if( ! Enum.TryParse<typeof(T)>(configValue, out result) ) ...
return result;
}
Пользователь запросил опубликовать текст ошибки (это во время кода, а не во время компиляции/выполнения), так что вот оно:
Тип «T» должен быть типом значения, не допускающим значение NULL, чтобы использовать его в качестве параметра TEnum в универсальном типе или методе «System.Enum.TryParse(string, out TEnum)».
byte
,long
и т. д.). - person Gabe   schedule 14.06.2011