あなたがに割り当てるフィールドの名前を知っているとき、配列は未知のタイプの配列に割り当てることができますか?

StackOverflow https://stackoverflow.com/questions/1663470

  •  12-09-2019
  •  | 
  •  

質問

私は、フィールドに配列を割り当てる必要があります。私は、フィールドの種類を知らないが、私はインスタンスへの参照とフィールドの名前を持っています。私は配列はフィールド型にキャストすることが可能と仮定することができます。これを行うことができますか?

編集ます:

うまくいけば、このコードはイムがやろうと何を明らかにし、これは割り当てで例外が発生します:

class MyClass
{
    static void Main()
    {
        MyClass t = new MyClass();
        A a = new A();
        C[] c = new C[] {new B()};
        t.Assign(a, "field", c);
    }

    void Assign(object obj, string field, object[] value)
    {
        // crashes
        obj.GetType().GetField(field).SetValue(obj, value);
    }
}

class A
{
    public B[] field;
}

class B : C { }

class C { }
役に立ちましたか?

解決 4

種類魂が私に解決策を示したので、楽しむ:)

using System;
using System.Reflection;

class MyClass
{
    static void Main()
    {
        MyClass t = new MyClass();
        A a = new A();
        C[] c = new C[] {new B()};
        t.Assign(a, "field", c);
    }

    void Assign(object obj, string field, object[] value)
    {
        FieldInfo pinfo = obj.GetType().GetField(field);
        Array array = Array.CreateInstance(pinfo.FieldType.GetElementType(), value.Length);
        value.CopyTo(array, 0);
        pinfo.SetValue(obj, array);
    }
}

class A
{
    public B[] field;
}

class B : C { }

class C { }
scroll top