动态获取对象列表的属性?

时间:2013-07-06 10:04:53

标签: c#

我有一个c#对象列表,每个对象有100个属性:

public string Group1;
public string Group2;
public string Group3;

.....................
...
..
.
public string Group99;
public string Group100;

我希望能够传递1到100范围内的两个数字,并且只能获得介于该范围之间的属性。

例如,如果我传入数字31到50,我会想要属性:

public string Group31;
public string Group32;

....................
...
..
.
public string Group50;

我怎样才能实现这个目标?

1 个答案:

答案 0 :(得分:1)

在你的情况下,你有字段,所以你可以像这样使用反射和LINQ:

//pass your class to typeof
var ClssType = typeof (SomeCLass);
ClssType.GetFields().OrderBy(n=>n.Name).Skip(30).Take(19).ToList();

跳过你传递你想跳过的数字befaure take fields。

如果您有属性,则可以使用.GetProperties()代替.GetFields()

要获取属性的值,您需要为数组中的每个对象调用.GetValue(obj, null)

   //let say you have array of objects myObj[] then your code will look like this:
   var fieldsInfos = ClssType.GetFields().OrderBy(n=>n.Name).Skip(30).Take(19).ToList();
   //go thorugh your array
   foreach(var obj in myObj)
   { 
       //go through fields
       foreach(var field in fieldsInfos)
       {
           //get value of field by calling
           Console.WriteLine(field.GetValue(obj, null));
        }     
   }
相关问题