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 нужно обрабатывать, и коллекции предусмотреть.

→ Ссылка