Un array può essere assegnato ad una matrice di un tipo sconosciuto quando si conosce il nome del campo da assegnare a?

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

  •  12-09-2019
  •  | 
  •  

Domanda

devo assegnare un array a un campo. Non so il tipo di campi, ma ho un riferimento a un'istanza e il nome del campo. Posso assumere la matrice può essere colata al tipo campi. questo può essere fatto?

Basso

Modifica:

Speriamo che questo codice chiarirà che cosa Im cercando di fare, questo fa sì che un'eccezione in assegnazione:

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 { }
È stato utile?

Soluzione 4

Quindi, un animo gentile mi ha mostrato la soluzione, godere:)

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