Мы узнаем количество полей и их значение в классе следующим образом
object bobik = new dog();
foreach(FieldInfo field in bobik.GetType().GetFields())
{
Console.WriteLine("{0} {1} {2}", field.FieldType, field.Name,
field.GetValue(bobik));
}
Но если нам в классе, встретится например, list, то консоль нам выведет
System.Collections.Generic.List`1[ClassName] fieldName
Как в процессе развернуть лист тоже? Можно сделать
if(field.GetType().IsArray)
{
SomeAction
}
Но нельзя сделать
IsList
Как можно в итоге вытащить и развернуть этот лист тоже?
У FieldInfo
есть свойство FieldType
- это тип, который вам нужен. Для примера можно сделать так:
Type type = field.FieldType;
if(type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>))
{
Type itemType = type.GetGenericArguments()[0]; // use this...
}
Ссылки на источники:
FieldInfo.FieldType
Метод GetGenericArguments
возвращает массив объектов. Поэтому можно убрать [0]
и работать с массивом (к примеру через foreach
).
Есть данные, записанные в массив или генерируемые на летуКак можно получить их случайную перестановку в массиве или другом контейнере?
В общем, хочу скинуть лог по почте, когда программа будет на финальной стадии завершения