将属性添加到列表中的类对象中

时间:2017-03-15 09:22:08

标签: c#

我有一个包含类对象的列表。我想知道如何在以后添加属性,而不是从一开始就直接将属性实现到该类中。

public class Example{

   public int ExampleInt {get; set;}
   public string ExampleString {get; set;}
   public double ExampleDouble {get; set;}
}

我有一个Example的列表,如:List<Example>

现在,我怎样才能将ExampleBool属性添加到List<Example>内的每个对象中,而不直接将其实现到Example类中?

2 个答案:

答案 0 :(得分:5)

C#是静态类型语言。您无法动态添加或删除类成员。但是您可以创建具有所需属性的新匿名类:

var examples = new List<Example>();
var result = from e in examples
             select new {
                 e.ExampleInt,
                 e.ExampleString,
                 e.ExampleDouble,
                 ExampleBoolean = true
             };

在某些情况下,使用动态对象而不是静态类型的类可能会有所帮助。看看ExpandoObject - 它允许您在运行时动态添加和删除成员。但是你将失去IntelliSense,性能将受到影响,你将不得不从头开始创建每个对象:

var examples = new List<dynamic>
{
    new ExpandoObject(), // initially it does not have any properties
    new ExpandoObject()
};

for (int i = 0; i < examples.Count; i++)
{
    examples[i].ExampleInt = i;
    // etc
}

for (int i = 0; i < examples.Count; i++) // we add new property
    examples[i].ExampleBoolean = i % 2 == 0;

foreach(var example in examples)
    Console.WriteLine($"{example.ExampleInt} {example.ExampleBoolean}");

答案 1 :(得分:0)

以标准方式无法实现,但您可以创建继承者

public class ExampleWithBool { public bool ExampleBoolean {get; set;}}

此外,匿名课程(见谢尔盖的回答)。