C#. Как получить значение поля из reference?
Есть такая модель данных:
public class Car
{
public string Name {get; set;}
public CarType Type {get; set;}
}
public class CarType
{
public string Name {get; set;}
}
CarType carType = new CarType();
carType.Name = "Грузовик";
Car car = new Car();
car.Name = "Марка машины";
car.Type = carType;
Как имея car можно обратиться к car.Type, определить ссылка это или значение, и если это ссылка - достать значение?
Для определения использовал
var props = car.GetType().GetProperties();
foreach (var prop in props)
{
if (prop.PropertyType.IsClass)
{
Console.WriteLine(prop.Name + " IS CLASS");
}
else
{
Console.WriteLine(prop.Name + " IS NOT");
}
}
Но условие всегда true и выдает IS CLASS
Ответы (1 шт):
Автор решения: Alexander Petrov
→ Ссылка
static void DoWork(object obj)
{
Type objType = obj.GetType();
foreach (var prop in objType.GetProperties())
{
var value = prop.GetValue(obj);
Type valueType = value.GetType();
if (value is string || (valueType.IsValueType && valueType.IsPrimitive))
{
Console.WriteLine($"{objType.Name}.{prop.Name} = {value}");
}
else
{
DoWork(value);
}
}
}
Вызов:
DoWork(car);
Результат:
Car.Name = Марка машины
CarType.Name = Грузовик
Это лишь набросок кода. Тут и null нужно обрабатывать, и коллекции предусмотреть.