У меня странный вопрос о разборе перечислений из строк.На самом деле, мое приложение должно обрабатывать несколько перечислений из файла конфигурации.Однако я не хочу писать процедуры синтаксического анализа для каждого типа перечисления (поскольку их много).
Проблема, с которой я сталкиваюсь, заключается в том, что следующий код показывает некоторую странную ошибку - Тип T долженбыть необнуляемым типом значения или чем-то в этом роде.Я думал, что перечисления по умолчанию не обнуляются?
Если я ограничу тип 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)'