实现自定义TypeConverter
问题描述:
我有一个非常简单的场景,我只想扩展System.ComponentModel.BooleanConverter
的功能,以便允许多个选项,而不仅仅是true
和false
。实现自定义TypeConverter
因此,例如像yes
,1
,on
等值与true
相同。
我试图重写GetStandardValues()
方法做一个简单的测试,我的假设是,如果我回到我的所有特定值的集合,为IsValid(string)
调用应该返回true
如果我通过我的定义值之一,但这样做似乎并非如此。我是否必须执行/覆盖一大堆废话才能做到这一点?
我想知道它是否值得,因为我真正需要的是IsValid()
功能。或者,首先比使用TypeDescriptors
更好?
答
如果您“只需要IsValid
功能”,那么它应该足以覆盖它。但是,实际上CanConvertFrom(Type)
实际上是您应该覆盖的方法,如果您只是想要测试是否可以转换类型。这种方法被一些基础设施类使用,在这种情况下,重写IsValid
可能是不够的。
对于布尔转换器,您还应该覆盖ConvertFrom(object)
,并且如果您不打算使用该值,则仅返回null
。否则,拨打IsValid
(这又称为CanConvertFrom
)可能会失败。
感谢您的答复尼古拉。经过一些测试后,我发现这不是解决我的问题的好方法。使用IsValid来测试字符串值,这不是我的好设计决定。幕后发生的事情是,如果.NET检查失败,则.NET会抛出System.FormatException,因此在使用这种检查时会带来很多额外的堆栈开销。 – snappymcsnap 2013-03-05 13:55:19