0

我想了解如何从外部类初始化数组对象。请参考以下代码:

Class C
{
    private string name { get; set; }
    private string value { get; set; }
}

Class B
{
    private C[] field;
    public C[] Field { get; set; };
}

Class Program 
{
    public static void Main(string[] args)
    {
        B b = new B();
        /* my question was how to initialize this array object inside B class */
        b.Field = new C[1]; 
        b.Field[0] = new C(); 
        /* Now I can access b.Field[0].name */ 
    }
}

请注意,我无法更改 B 类和 C 类,因为它们已经提供给我。谢谢你的帮助。

4

1 回答 1

2

首先,您不能从 C 外部修改名称和值属性,因为它们是私有的。
公开您的 name 和 value 属性后,您可以按如下方式实例化您的数组。

B b = new B();
b.Field = new C[] {new C {name = "lorem", value = "ipsum"}, new C {name = "dolor", value = "sit"}};

如果您使用反射,请通过工厂创建您的 C 对象,如下所示。

public class CFactory
{
    public C Create(string name, string value)
    {
        C result = new C();
        var props = result.GetType().GetProperties(BindingFlags.NonPublic | BindingFlags.Public
                                                | BindingFlags.Instance | BindingFlags.Static);

        var nameProp = props.FirstOrDefault(p => p.Name == "name");
        var valProp = props.FirstOrDefault(p => p.Name == "value");

        if (nameProp != null) nameProp.SetValue(result, name);
        if (valProp != null) valProp.SetValue(result, value);

        return result;
    }
}

并使用它;

B b = new B();
var fac = new CFactory();
b.Field = new C[] {fac.Create("lorem", "ipsum"), fac.Create("dolor", "sit")};
于 2013-10-22T08:11:32.713 回答