循环遍历对象并获取属性

我有一个方法返回操作系统属性列表。 我想循环遍历属性并对每个属性进行一些处理。所有属性都是字符串

我如何循环对象

C#

// test1 and test2 so you can see a simple example of the properties - although these are not part of the question String test1 = OS_Result.OSResultStruct.OSBuild; String test2 = OS_Result.OSResultStruct.OSMajor; // here is what i would like to be able to do foreach (string s in OS_Result.OSResultStruct) { // get the string and do some work.... string test = s; //...... } 

你可以用reflection做到这一点:

 // Obtain a list of properties of string type var stringProps = OS_Result .OSResultStruct .GetType() .GetProperties() .Where(p => p.PropertyType == typeof(string)); foreach (var prop in stringProps) { // Use the PropertyInfo object to extract the corresponding value // from the OS_Result.OSResultStruct object string val = (string)prop.GetValue(OS_Result.OSResultStruct); ... } 

[由Matthew Watson编辑]我已经冒昧地根据上面的代码添加了另一个代码示例。

您可以通过编写一个方法来概括解决方案,该方法将为任何对象类型返回IEnumerable

 public static IEnumerable> StringProperties(object obj) { return from p in obj.GetType().GetProperties() where p.PropertyType == typeof(string) select new KeyValuePair(p.Name, (string)p.GetValue(obj)); } 

您可以使用generics进一步概括它:

 public static IEnumerable> PropertiesOfType(object obj) { return from p in obj.GetType().GetProperties() where p.PropertyType == typeof(T) select new KeyValuePair(p.Name, (T)p.GetValue(obj)); } 

使用第二种forms,迭代您可以执行的对象的所有字符串属性:

 foreach (var property in PropertiesOfType(myObject)) { var name = property.Key; var val = property.Value; ... } 

您可以使用Reflection来循环GetProperties Resullt:

 OS_Result.OSResultStruct.GetType().GetProperties()