2013-03-04 155 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