Перебор словаря, полученного посредством отраженияC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Перебор словаря, полученного посредством отражения

Сообщение Anonymous »

Итак, у меня есть код, который должен рекурсивно печатать все свойства и их содержимое данного объекта.

Код: Выделить всё

static public void PrintProperties(object obj, int indent)
{
if (obj == null) return;
string indentString = new string(' ', indent);
Type objType = obj.GetType();
PropertyInfo[] properties = objType.GetProperties();
foreach (PropertyInfo property in properties)
{
object propValue = property.GetValue(obj, null);
if (property.PropertyType.Assembly == objType.Assembly && !property.PropertyType.IsEnum)
{
Console.WriteLine("{0}{1}:", indentString, property.Name);
PrintProperties(propValue, indent + 2);
}
else
{
if (null != propValue)
{
Type t = propValue.GetType();
//Console.WriteLine(":::::{0}:::::", propValue.GetType());
bool isDict = t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Dictionary);
if (isDict)
{
Type keyType = t.GetGenericArguments()[0];
Type valueType = t.GetGenericArguments()[1];
foreach (KeyValuePair kvp in (Dictionary)propValue)
{
Console.WriteLine(string.Format("Key = {0}, Value = {1}", kvp.Key, kvp.Value));
}
}
}

Console.WriteLine("{0}{1}: {2}", indentString, property.Name, propValue);
}
}
}
Это пока не работает для списка и словаря, сейчас я работаю над частью словаря.< /p>

Проблема в том, что я извлекаю тип ключа и значение с помощью:

Код: Выделить всё

Type keyType = t.GetGenericArguments()[0];
Type valueType = t.GetGenericArguments()[1];
Но потом VS2013 сообщает мне, что с этой строкой возникла проблема:

Код: Выделить всё

foreach (KeyValuePair kvp in (Dictionary)propValue)
Он сообщает мне, что тип или пространство имен KeyType и valueType не найдены.
Что мне не хватает?

Спасибо.

PS: .net 4.5.1

Подробнее здесь: https://stackoverflow.com/questions/403 ... reflection
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»