实现自定义TypeConverter

本文关键字:TypeConverter 自定义 实现 | 更新日期: 2023-09-27 18:02:05

我有一个非常简单的场景,我只想扩展System.ComponentModel.BooleanConverter的功能,这样它将允许多个选项,而不仅仅是truefalse

因此,例如yes1on等值与true相同。

我尝试重写GetStandardValues()方法来进行快速测试,我的假设是,如果我返回了所有特定值的集合,那么如果我传入了我定义的值之一,那么对IsValid(string)的调用应该返回true,但事实并非如此。我必须实现/覆盖一大堆垃圾才能做到这一点吗?

我想知道这是否值得,因为我真正需要的只是IsValid()功能。或者,也许有一个比最初使用TypeDescriptors更好的选择?

实现自定义TypeConverter

如果你"只需要IsValid功能",那么只覆盖它就足够了。然而,在实践中,如果你只是想测试类型是否可以转换,CanConvertFrom(Type)实际上是你应该覆盖的方法。这种方法被一些基础结构类使用,在这种情况下,仅仅重写IsValid可能是不够的。

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