我想了解爲什麼下面的代碼不能按預期工作; TypeDescriptor
根本就沒有從屬性中獲取自定義轉換器。我只能假設我犯了一個明顯的錯誤,但我看不到它。爲什麼這個TypeConverter不工作?
- 編輯 - 此代碼似乎工作時,我自己在控制檯中運行它,實際上我調用一個更復雜的應用程序和從一個不同的名稱空間內的轉換器。
- 編輯 - 或者我可以調試TypeDescriptor的任何建議,以便我可以看到發生了什麼,然後我可以自己回答。
- 編輯 - 這個問題幾乎肯定與不同的程序集中的碎片相關。
- 編輯 - 它看起來像不工作,因爲動態加載程序集的一些怪癖 - 這個代碼運行在像體系結構的插件下。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.ComponentModel;
namespace MyTest
{
public class TestTester
{
public static void Main(string[] args)
{
object v = TypeDescriptor.GetConverter(typeof(MyTest.Test)).ConvertFromInvariantString("Test");
}
}
public class TestConverter : TypeConverter
{
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return false;
}
public override bool CanConvertFrom(ITypeDescriptorContext context, System.Type sourceType)
{
if (sourceType == typeof(string) || base.CanConvertFrom(context, sourceType))
{
return true;
}
return base.CanConvertFrom(context, sourceType);
}
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
{
if (destinationType == typeof(Test) || base.CanConvertTo(destinationType))
{
return true;
}
return base.CanConvertTo(context, destinationType);
}
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
{
if (value.GetType() == typeof(string))
{
Test t = new Test();
t.TestMember = value as string;
return t;
}
return base.ConvertFrom(context, culture, value);
}
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
{
if (destinationType == typeof(string) && value.GetType() == typeof(Test))
{
return ((Test)value).TestMember;
}
return base.ConvertTo(context, culture, value, destinationType);
}
}
[TypeConverterAttribute(typeof(TestConverter))]
public struct Test
{
public string TestMember { get; set; }
}
}
我認爲這是最有可能做它在不同的程序集 - 我剛剛嘗試移動位;當我有一個PropertyGrid引用另一個程序集中的項目時,它不能再使用它的TypeConverters等來顯示該屬性。如果沒有解決這個問題,我會很驚訝。 – cyborg 2010-09-01 11:30:59