所以我上周问了类似的问题,但我认为这很混乱,所以我会尽量简化它。
比如说我有一个只包含这样的属性的类:
public class MyPropertyClass
{
public int IntegerProperty { get; set; }
}
现在假设我用这样的数组创建了另一个类MyPropertyClass
:
public class AnotherPropertyClass
{
public MyPropertyClass[] ArrayProperty { get; set; }
}
现在这里是复杂的部分。我需要以MyPropertyClass[]
某种方式动态创建一个。List<object>
到目前为止,我一直在尝试它。InvokeMember
然后,用这个数组调用。像这样的东西:
//The list that I am adding elements to elsewhere in the code
List<object> objList = new List<object>();
//Adding a couple elements
objList.Add(new MyPropertyClass());
objList.Add(new MyPropertyClass());
//Create the parameter object array, has to be length one and contain an
//object array casted to MyPropertyClass or it will throw an exception.
object[] ob = new object[1] { objList.ToArray() };
//Instantiate the actual object I want to assign the array to.
object obj = new AnotherPropertyClass();
//The call to InvokeMember
obj.GetType().InvokeMember(
"ArrayProperty",
BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty,
Type.DefaultBinder,
obj,
ob);
此代码将引发异常。问题是, objList.ToArray() 创建一个object[]
,当 InvokeMember 尝试将其分配给 时MyPropertyClass[]
,它抱怨类型不匹配,即使所有元素都是MyPropertyClass
类型。基本上我需要的是一种说法,“嘿,objList.ToArray() 中的所有元素都将是MyPropertyClass
”,即 object{MyPropertyClass[]} 同时让实际类型是任意的,它可能不是MyPropertyClass
,它可以是其他类型,我在编译时不知道。
到目前为止,我在这里所拥有的只是我的尝试,如果您知道另一种方法,我会全力以赴。如果您想了解更多信息,请在此处查看我的旧问题:
我只是认为那里没有太多与我遇到的实际问题无关的额外内容。