2013-03-04 73 views
0

我有一个非常简单的场景,我只想扩展System.ComponentModel.BooleanConverter的功能,以便允许多个选项,而不仅仅是truefalse实现自定义TypeConverter

因此,例如像yes,1,on等值与true相同。

我试图重写GetStandardValues()方法做一个简单的测试,我的假设是,如果我回到我的所有特定值的集合,为IsValid(string)调用应该返回true如果我通过我的定义值之一,但这样做似乎并非如此。我是否必须执行/覆盖一大堆废话才能做到这一点?

我想知道它是否值得,因为我真正需要的是IsValid()功能。或者,首先比使用TypeDescriptors更好?

回答

2

如果您“只需要IsValid功能”,那么它应该足以覆盖它。但是,实际上CanConvertFrom(Type)实际上是您应该覆盖的方法,如果您只是想要测试是否可以转换类型。这种方法被一些基础设施类使用,在这种情况下,重写IsValid可能是不够的。

对于布尔转换器,您还应该覆盖ConvertFrom(object),并且如果您不打算使用该值,则仅返回null。否则,拨打IsValid(这又称为CanConvertFrom)可能会失败。

+0

感谢您的答复尼古拉。经过一些测试后,我发现这不是解决我的问题的好方法。使用IsValid来测试字符串值,这不是我的好设计决定。幕后发生的事情是,如果.NET检查失败,则.NET会抛出System.FormatException,因此在使用这种检查时会带来很多额外的堆栈开销。 – snappymcsnap 2013-03-05 13:55:19