Foreach 不能用于“PropertyInfo”类型的变量,因为“PropertyInfo”没有“GetEnumerator”的定义

问题描述 投票:0回答:1

我想用

Dictionary<string, object>
循环迭代
foreach
。首先,我通过反射得到了所有的
items
。当
item.Name
不是
settings
时,程序将进入
else
路径。这里
item
在运行时是
Dictionary<string, object>
类型。但我收到错误,因为在编译时
item
的类型为
PropertyInfo
。可以循环字典吗?

PropertyInfo[] propertyInfos = MyResponse.MyDocument.GetType().GetProperties();
foreach (var item in propertyInfos)
{
    if (item.Name != "settings")
    {
         // do something
    }
    else
    {
         foreach (var setting in item) // Compiler Error CS1579
         {
              // do something else
          }
     }
}

Microsoft Learn 上的编译器错误 CS1589

我正在使用

.NET Framework 4.5.

c# .net foreach reflection properties
1个回答
0
投票

这里

item
在运行时是
Dictionary<string, object>
类型。

不,不是;它是

PropertyInfo
类型(或者可能是一些更具体的子类,如
RuntimePropertyInfo
)。如果您想要针对特定对象(假设非静态)的属性的,那么您可以通过item.GetValue(MyResponse.MyDocument)
获取值
。不过,这会给你
object
;如果您知道该值为
Dictionary<string, object>
,则可以投射:

var untyped = tem.GetValue(MyResponse.MyDocument);
var typed = (Dictionary<string, object>`)untyped;

现在您可以使用

typed
功能,例如
foreach

© www.soinside.com 2019 - 2024. All rights reserved.