class myClass1
{
public string obj1;
public string obj2;
}
class myClass2
{
public myClass1[] fArray = new myClass1[1];
public string str;
}
class Program
{
static void Main(string[] args)
{
string mytype = "ConsoleApp3.myClass2";
Type type = Type.GetType(mytype);
object myobj = activator.CreateInstance(type);
FieldInfo fi = type.GetField("fArray");
Type type2 = fi.FieldType.GetElementType();
object newObj;
IList list = (IList)activator.CreateInstance(typeof(List<>).MakeGenericType(fi.Getvalue(myobj).GetType().GetElementType()));
{
newObj = activator.CreateInstance(type2);
FieldInfo fi2 = type2.GetField("obj1");
fi2.Setvalue(newObj,"some txt1");
FieldInfo fi3 = type2.GetField("obj2");
fi3.Setvalue(newObj,"some txt2");
list.Add(newObj);
}
{
newObj = activator.CreateInstance(type2);
FieldInfo fi2 = type2.GetField("obj1");
fi2.Setvalue(newObj,"some txt2");
list.Add(newObj);
}
fi.Setvalue(myobj,list.Cast<myClass1>().ToArray());
上面的代码工作正常。在我的用例中,在编译时不知道“ myClass1”。我在运行时以字符串形式接收myClass1的类型。
如何使用反射将列表强制转换为myClass1类型的数组?
fi.Setvalue(myobj,list.Cast<???>().ToArray());