1

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

我怎么能做到这一点?

4

1 回答 1

1

在您的情况下,您有字段,因此您可以像这样使用反射和 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));
        }     
   }
于 2013-07-06T10:12:58.173 回答