【发布时间】:2011-04-06 11:44:04
【问题描述】:
我试图理解为什么下面的代码没有按预期工作; TypeDescriptor 根本没有从属性中获取自定义转换器。我只能假设我犯了一个明显的错误,但我看不到它。
-- 编辑 -- 当我在控制台中单独运行这段代码时,它似乎可以工作,我实际上是从一个更复杂的应用程序和不同的命名空间中调用一个转换器。
-- 编辑 -- 或者关于如何调试 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; }
}
}
【问题讨论】:
标签: c# typeconverter