Вопрос

Я пытаюсь воспроизвести 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.

Ваше здоровье Энтони

Это было полезно?

Решение

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

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

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

Также смотрите этот билет на подключение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top