Как получить значение свойства на основе имени
есть ли способ получить значение свойства объекта на основе его имени?
Например, если у меня есть:
public class Car : Vehicle { public string Make { get; set; } }
а также
- Как передать функцию в качестве параметра в C #?
- Используя .Net, как я могу определить, является ли тип Numeric ValueType?
- Динамическое создание прокси-classа
- Как получить все экземпляры всех загруженных типов, реализующих данный интерфейс?
- Как создать экземпляр из строки в C #?
var car = new Car { Make="Ford" };
Я хочу написать метод, в котором я могу передать имя свойства, и он вернет значение свойства. то есть:
public string GetPropertyValue(string propertyName) { return the value of the property; }
- C ++ итерации во nested поле struct с boost fusion adapt_struct
- В чем разница между instanceof и Class.isAssignableFrom (...)?
- Вывод типа отражения на Java 8 Lambdas
- Как получить общий тип во время выполнения?
- Как я могу динамически добавлять поле в class в C #
- Создание экземпляра конструктора с параметрами во внутреннем classе с reflectionм
- Java - получить список всех classов, загруженных в JVM
- Отключить reflection Java для текущего streamа
return car.GetType().GetProperty(propertyName).GetValue(car, null);
Вы должны использовать reflection
public object GetPropertyValue(object car, string propertyName) { return car.GetType().GetProperties() .Single(pi => pi.Name == propertyName) .GetValue(car, null); }
Если вы хотите быть действительно фантазией, вы можете сделать это методом расширения:
public static object GetPropertyValue(this object car, string propertyName) { return car.GetType().GetProperties() .Single(pi => pi.Name == propertyName) .GetValue(car, null); }
А потом:
string makeValue = (string)car.GetPropertyValue("Make");
Вы хотите Reflection
Type t = typeof(Car); PropertyInfo prop = t.GetProperty("Make"); if(null != prop) return prop.GetValue(this, null);
Простой пример (без жесткого кода записи отражения в клиенте)
class Customer { public string CustomerName { get; set; } public string Address { get; set; } // approach here public string GetPropertyValue(string propertyName) { try { return this.GetType().GetProperty(propertyName).GetValue(this, null) as string; } catch { return null; } } } //use sample static void Main(string[] args) { var customer = new Customer { CustomerName = "Harvey Triana", Address = "Something..." }; Console.WriteLine(customer.GetPropertyValue("CustomerName")); }
Кроме того, другие ребята отвечают, его легко получить значение свойства любого объекта с помощью метода расширения:
public static class Helper { public static object GetPropertyValue(this object T, string PropName) { return T.GetType().GetProperty(PropName) == null ? null : T.GetType().GetProperty(PropName).GetValue(T, null); } }
Использование:
Car foo = new Car(); var balbal = foo.GetPropertyValue("Make");
Расширяясь на ответе Адама Ракиса, мы можем сделать общий метод расширения просто следующим:
public static TResult GetPropertyValue(this object t, string propertyName) { object val = t.GetType().GetProperties().Single(pi => pi.Name == propertyName).GetValue(t, null); return (TResult)val; }
Вы можете бросить некоторую обработку ошибок вокруг этого, если хотите.