Использование TypeDescriptor вместо TryParse - PullRequest
1 голос
/ 15 июля 2009

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

    [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;
    }

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

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

1 Ответ

2 голосов
/ 15 июля 2009

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

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

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

Также см. этот билет Connect .

...