编译报错CS1579:如何遍历反射获取的Dictionary<string,object>?
解决CS1579错误并遍历settings字典
你遇到的问题是因为item是PropertyInfo类型(仅描述属性的元数据),而非属性的实际值,PropertyInfo本身不支持foreach遍历。要遍历settings对应的字典,需要先获取该属性的实际值并转换为Dictionary<string, object>类型,具体修改如下:
修改后的代码
PropertyInfo[] propertyInfos = MyResponse.MyDocument.GetType().GetProperties(); foreach (var item in propertyInfos) { if (item.Name != "settings") { // 执行非settings属性的操作 } else { // 获取settings属性的实际值 var settingsValue = item.GetValue(MyResponse.MyDocument) as Dictionary<string, object>; // 判空避免空引用异常 if (settingsValue != null) { foreach (var setting in settingsValue) { // 遍历字典的操作,setting是KeyValuePair<string, object>类型 // 可通过setting.Key和setting.Value访问键值对 } } } }
关键说明
item.GetValue(MyResponse.MyDocument):通过PropertyInfo获取目标对象(MyResponse.MyDocument)上该属性的实际值。as Dictionary<string, object>:将值安全转换为字典类型,转换失败时返回null,避免强制转换抛出异常。- 判空检查:确保转换成功后再执行遍历,防止空引用错误。
内容的提问来源于stack exchange,提问作者user1673665
相关产品推荐
相关产品推荐

