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

法哈德·塔兰(Farhad-Taran)

我有一个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;

我将如何实现这一目标?

奥列克西·阿扎

在您的情况下,您具有字段,因此可以像这样使用反射和LINQ:

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

在“跳过”中,传递要跳过默认输入字段的数字。

如果您有属性,则可以使用.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));
        }     
   }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章