-1

所以我上周问了类似的问题,但我认为这很混乱,所以我会尽量简化它。

比如说我有一个只包含这样的属性的类:

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,它可以是其他类型,我在编译时不知道。

到目前为止,我在这里所拥有的只是我的尝试,如果您知道另一种方法,我会全力以赴。如果您想了解更多信息,请在此处查看我的旧问题:

将 object[] 运行时转换为自定义类型数组

我只是认为那里没有太多与我遇到的实际问题无关的额外内容。

4

2 回答 2

3

您可以创建一个未指定类型的数组,如下所示:

Array array = Array.CreateInstance(someType, someSize);
于 2012-12-17T16:23:24.950 回答
1

你这样做:

List<MyPropertyClass> objList = new List<MyPropertyClass>();
objList.Add(new MyPropertyClass());
objList.Add(new MyPropertyClass());

AnotherPropertyClass obj = new AnotherPropertyClass();

obj.GetType().GetProperty("ArrayProperty").SetValue(obj, objList.ToArray());
于 2012-12-17T16:30:29.387 回答