可以说我有一个像这样的课程:

public class Foo
{
    public Foo {}

    public int Titi { get; set; }
    public int Toto { get; set; }
    public int Tata { get; set; }
}


我可以像这样初始化一个新实例:

var inst = new Foo { Titi = 12, Toto = 42, Tata = 421 };


但是,如何创建执行与上述相同的初始化的正确实例描述符?

public class FooConverter : TypeConverter
{
    // ...

    public override object ConvertTo(ITypeDescriptorContext context,
                                     CultureInfo culture,
                                     object value,
                                     Type destinationType)
    {
        if (destinationType == typeof(InstanceDescriptor) && value is Foo)
        {
            // Incorrect example because properties wont
            // be initialized to 12, 42 and 421
            var ctor = typeof(Foo).GetConstructor(Type.EmptyTypes);

            return new InstanceDescriptor(ctor, null);
         }

         // ...
    }
}


NB1:我问这个问题是因为我想为'Foo'类创建TypeConverter,并且需要提供对'InstanceDescriptor'的转换

NB2:是的,我可以向带有3个参数的Foo类中添加一个构造函数,但是要避免这种情况,并且还想知道哪个“构造描述”对应于上面的示例。

最佳答案

我不知道您要使用什么,但是InstanceDescriptor似乎不仅仅使用构造函数,因此您可以执行以下操作:

public static class FooSerialization
{
    public static Foo CreateDesignFooInstance()
    {
        return new Foo { Titi = 12, Toto = 42, Tata = 421 };
    }
}


然后 :

var m = typeof(FooSerialization).GetMethod("CreateDesignFooInstance",
    BindingFlags.Static | BindingFlags.Public);
var desc = new InstanceDescriptor(m, null);

10-01 21:58