Как получить тип значения свойства объекта по его адресу? [дубликат]

146
14 сентября 2021, 17:30
На этот вопрос уже дан ответ здесь:
Как получить значение свойства объекта по его адресу? [дубликат] (1 ответ)
Закрыт 1 год назад.

Имеется экземпляр объекта и строка с текстовым представлением "адреса" свойства объекта. Например:

public class Person {
  public string Name { get; set; }
  public DateTime BirthDate { get; set; }
  public Address BirthPlace { get; set; }
}
public class Address {
  public string Country { get; set; }
  public string City { get; set; }
  public string Street { get; set; }
  public string Nr { get; set; }
}

Как получить тип значения свойства используя его "адрес"?
Например такой: BirthPlace.Country?

Answer 1

С помощью рефлексии можно сделать так:

public Type GetTypeOfProperty(Type type, string propName, char delimiter = '.')
{
    const BindingFlags bindingFlags = BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public;
    Type propertyType = null;
    if (propName.Contains(delimiter.ToString()))
    {
        string[] propNames = propName.Split(new char[] { delimiter }, 2);
        propertyType = type.GetProperty(propNames[0], bindingFlags)?.PropertyType;
        return GetTypeOfProperty(propertyType, propNames[1]);
    }
    else
    {
        propertyType = type.GetProperty(propName, bindingFlags)?.PropertyType;
    }
    return propertyType;
}
// Использование:
// string propAddress = "BirthPlace.Country";
// Type birthPlaceType = GetTypeOfProperty(typeof(Person), propAddress);

"Поиграться" можно здесь.

READ ALSO
Связь нового контролера с новой View

Связь нового контролера с новой View

Я подключил базу данных через EFВсё хорошо я попробовал поработать с ней

103
Как правильно именовать делегаты?

Как правильно именовать делегаты?

Есть класс, который что-то делает и я хочу дать пользователю возможность в некоторых местах повлиять на дальнейшую работу этого класса

101
Для чего служат Конструкторы в c#

Для чего служат Конструкторы в c#

Для чего именно служат конструкторы в C# Зачем нужно их создавать? Дайте наглядный пример, пожалуйстаВозможно вопрос глупый, но я не понимаю...

261