2013-03-04 2 views
0

У меня действительно простой сценарий, когда я просто хочу расширить функциональность System.ComponentModel.BooleanConverter, чтобы он позволял использовать несколько опций, а не только true и false.Реализация пользовательского TypeConverter

Так, например, значений, как yes, 1, on и т.д. являются такими же, как true.

Я попытался перекрывая GetStandardValues() метод, чтобы сделать быстрый тест, мое предположение в том, что если бы я вернулся коллекция всех моих конкретных значений, что вызов IsValid(string) должен вернуться true, если я прохожу в одном из моих определенных значений, но это делает похоже, не так. Должен ли я выполнять/отменять целую кучу дерьма, чтобы сделать это?

Мне интересно, стоит ли это, так как все, что мне действительно нужно, это функциональность IsValid(). Или, может быть, есть лучший вариант, чем использовать TypeDescriptors в первую очередь?

ответ

2

Если вам нужна только функция IsValid, «тогда этого должно быть достаточно, чтобы переопределить именно это. Однако на практике CanConvertFrom(Type) - это фактически метод, который вы должны переопределить, если вы просто хотите проверить, можно ли преобразовать тип. Этот метод используется некоторыми классами инфраструктуры, и в этом случае может быть недостаточно переопределения IsValid.

Для булевого преобразователя вы также должны переопределить ConvertFrom(object) и просто вернуть null, если вы не собираетесь использовать значение. В противном случае вызов IsValid (который, в свою очередь, вызывает CanConvertFrom), может выйти из строя.

+0

Спасибо за ответ Никола. После некоторого тестирования я обнаружил, что это не очень хороший способ решить мою проблему. Использование IsValid для тестирования строковых значений, подобных этому, не является хорошим решением для меня с моей стороны. Что происходит за кулисами, так это то, что .NET выдает исключение System.FormatException, если он не выполняет проверку, поэтому при использовании этого большого количества накладных расходов на дополнительный стек. – snappymcsnap

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