我想用
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.
这里
在运行时是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