Я хочу перебрать цикл 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
}
}
}
Ошибка компилятора CS1589 в Microsoft Learn
Я использую .NET Framework 4.5.





Здесь
itemимеет типDictionary<string, object>во время выполнения.
Нет, это не так; он имеет тип PropertyInfo (или, возможно, какой-то более конкретный подкласс, например RuntimePropertyInfo). Если вам нужно значение свойства для конкретного объекта (при условии, что он нестатический), вы можете получить значение с помощью item.GetValue(MyResponse.MyDocument). Однако это дает вам object; если вы знаете, что значение равно Dictionary<string, object>, вы можете использовать:
var untyped = item.GetValue(MyResponse.MyDocument);
var typed = (Dictionary<string, object>)untyped;
теперь вы можете использовать функции typed, например foreach
Этот вопрос похож на: Получить значение свойства из строки с помощью отражения. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.