2009-07-14 9 views
1

Я пытаюсь реплицировать TryParse для общих типов и думал, что TypeDescriptor может дать мне то, что я за ним. Поэтому я придумал следующий тестовый пример, но он терпит неудачу, просто интересно, знает ли кто, где я ошибаюсь.Использование TypeDescriptor вместо TryParse

[TestMethod] 
    public void Test() 
    { 
     string value = "Test"; 
     Guid resultValue; 
     var result = this.TryConvert(value, out resultValue); 
    } 

    public bool TryConvert<T>(string value, out T resultValue) 
    { 
     var converter = System.ComponentModel.TypeDescriptor.GetConverter(typeof(T)); 
     if (converter.IsValid(value)) 
     { 
      resultValue = (T)converter.ConvertFrom(value); 
      return true; 
     } 
     resultValue = default(T); 
     return false; 
    } 

Примечание. Я не хочу использовать блок catch try.

Приветствие Энтони

+0

Где это не удается? Является ли конвертер нулевым? Является ли вызов IsValid возвратом false? –

+0

IsValid всегда возвращает true. Следовательно, эта строка не работает «resultValue = (T) converter.ConvertFrom (value);» –

ответ

2

Из MSDN документации по TypeConverter.IsValid:

Метод IsValid используется для проверки значения в пределах типа вместо того, чтобы определить, является ли значение может быть преобразовано в данном тип.

Таким образом, он будет проверять только тип значения, а не то, является ли значение правильным вводом, который может быть проанализирован.

См. Также this Connect ticket.

+1

EnumConverter, NullableConverter и UriTypeConverter являются единственными, которые фактически используют IsValid. – user7116

 Смежные вопросы

  • Нет связанных вопросов^_^