0

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

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

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

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

4

4 回答 4

3

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

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

foreach(Option option in xmloptions)
{
    question["SomeOtherProperty"] = option.SomeOtherProperty;
}
于 2012-05-01T14:17:34.353 回答
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;
于 2012-05-01T14:24:59.773 回答
0

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

于 2012-05-01T14:17:31.787 回答
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 继承,但这些会显着增加复杂性。

但是,尝试使用字典而不是动态的,这对您来说可能会更容易。

于 2012-05-01T14:22:10.880 回答