2014-07-18 37 views
1

假設我有,有一個類型轉換器應該,是爲了轉換和從MyClass的一個類型轉換器能夠轉換MyClass的

[TypeConverter(typeof(MyClassConverter))] 
public class MyClass 
{ 
    // Insert code here. 
} 

public class MyClassConverter : System.ComponentModel.TypeConverter 
{ 
    public override bool CanConvertFrom(Type destType) 
    { 
     // Insert code here. 
    } 
} 
... etc 

應該MyClassConverter能夠轉換MyClass類型的對象MyClass的?

如果是這樣,如果要求MyClassConverter將MyClass的對象轉換爲MyClass的對象,是否應返回原始的MyClass或它的副本?

我看到Micosoft有一些不一致的行爲:

int i = 4; 
TypeConverter typeConverter = new TypeConverter(); 
bool b = typeConverter.CanConvertTo(typeof(int)) 

出現b等於假。我看到類似的行爲,如果我想使用PointConverter將System.Drawing.Point轉換爲System.Drawing.Point。但顯然一個字符串CanConvertTo是一個字符串,但是一個System.Drawing.Color不能被ColorConverter轉換爲System.Drawing.Color。所以它與值類型或引用類型無關。

其他的問題:如果MyTypeConverter CanConvertFrom(typeof運算(X))和MyTypeConverter CanConvertTo(typeof運算(Y),應該MyTypeConverter能夠從類型X轉換爲Y型

回答

2

理解爲什麼類型這是很重要的轉換器存在,它們是膠水,使得Visual Studio中的各種設計人員可以工作,他們的主要角色是在特定類型的對象與字符串之間來回轉換。您可以編輯以更改對象。

該框架有很多內置TypeConverters。像PointConverter和ColorConverter一樣。如果sourceType參數是System.String,它們的CanConvertFrom()方法只會說「繼續」。還有一個匹配的ConvertFrom()方法,它只有解析字符串的代碼。當在一個PropertyGrid或內置的屬性窗口中顯示一個Point或Color時,他們所做的所有都有

你當然可以讓自定義的TypeConverter做你想做的任何事情。它只是不是很清楚,你會遇到一個實際的用例,除非你寫代碼明確使用TypeConverter。

false在您的代碼片段中返回的診斷是您沒有正確實現CanConvertFrom()。很難說,你省略了代碼。它必須明確地識別typeof(int)。並且當然有必要的代碼在ConvertFrom()方法中從int轉換爲bool

+0

我的代碼中的例子是來自Microsoft的類型轉換器的返回值,不是我的。無論如何,謝謝你的答案。我想知道什麼是整潔的:給我的班級一個演員操作員/轉換器方法,或創建一個單獨的類型轉換器班。你的回答明確表明,這些類型轉換器主要用於綁定源等 –

相關問題