使用反射设置对象数组类型的属性值

本文关键字:类型 属性 数组 对象 反射 设置 | 更新日期: 2023-09-27 18:07:56

我正在尝试生成一些通用代码,可以从另一个系统生成的文本创建c#对象。对象将用于方法调用——方法调用也将通过反射完成。当我创建这个方法参数对象时,我不知道如何实例化和赋值给数组类型的属性。我可以使用setValue在下面的代码示例中分配给"name",但是如何分配值给数组?

class Car {
    public string name { get; set; }
    public Door[] doors { get; set; }
}
class Door {
    public int index { get; set; }
    public bool isDusty { get; set; }
}
public object createMethodParameter(Vehicle<T> v)
    object methodParameter;
    Type type = v.GetType();
    PropertyInfo[] properties;
    MethodInfo[] mi = type.GetMethods();
    ParameterInfo[] pi;
    foreach (var method in mi)
    {
        if ("create".Equals(method.Name.ToLowerInvariant())) // look for the create method
        {
            pi = method.GetParameters();
            foreach (var param in pi)
            {
                returnValue = Activator.CreateInstance(param.ParameterType);
                properties = param.ParameterType.GetProperties();
                foreach (PropertyInfo property in properties)
                {
                    if (property.PropertyType.IsArray)
                    {
                        // how to create the doors array on the car??
                    }
                    else
                    {
                        property.SetValue(methodParameter, "Porsche", null);
                    }
                }
            }
        }
    }
    return methodParameter;
}

使用反射设置对象数组类型的属性值

Array.CreateInstance(property.PropertyType.GetElementType(), 4)