具有可变子属性的C#属性

时间:2012-05-01 14:15:49

标签: c# asp.net xml

是否可以在C#中创建具有可变数量的子属性的属性,然后通过xml生成它们?以下示例

Question.Name = "cake";
Question.Type = "radio";
foreach(Option option in xmloptions)
{
    Question...........
}

所以我得到的是xmloptions在一个问题上有5个选项,然后在下一个问题上有4个选项。我可以在我创建的属性中填充这些问题吗?如果是这样,我怎么能列举它们呢?

如果这没有意义,请原谅我......

4 个答案:

答案 0 :(得分:3)

您可以使用Dictionary<string, object>(如果您总是提前知道类型,也可以使用比对象更具体的类型)来存储它们:

var question = new Dictionary<string, object>();
question["Name"] = "cake";
question["Type"] = "radio";

foreach(Option option in xmloptions)
{
    question["SomeOtherProperty"] = option.SomeOtherProperty;
}

答案 1 :(得分:1)

我认为Question类的一个属性应该是列表或字典:

public class Question {

    private List<Option> _Options = new List<Option>() 

    public List<Option> Options {
      get { return m_Options; }
    }
} 

然后添加选项:

question.Options.Add(option);

如果每个选项都由某些东西标识 - 例如名称 - 您可以使用字典:

public class Question {

    private  Dictionary<string, Option> _Options = new Dictionary<string,Option>();

    public Dictionary<string,Option> Options {
      get { return _Options; }
    }
} 

在这种情况下,您可以使用以下选项添加选项:

question.Options[name] = option;

答案 2 :(得分:0)

您可以将Option(Question.Option)的属性类型设置为arraylist。如果需要,可以将其设为问题对象列表。

答案 3 :(得分:0)

您可能正在寻找像.Net 4中的ExpandoObject这样的动态对象。您可以动态添加属性和方法。

http://blogs.msdn.com/b/csharpfaq/archive/2009/10/01/dynamic-in-c-4-0-introducing-the-expandoobject.aspx

您也可以继承DynamicObject或IDynamicMetaObjectProvider,但这些复杂性会显着增加。

但是,尝试使用字典而不是动态,它可能会更容易。