Есть что-то вроде Python getattr() в С#?
Есть ли что-то вроде Python getattr() в С#? Я хотел бы создать окно, прочитав список, содержащий имена элементов управления, которые будут помещены в окно.
Ответы
Ответ 1
Существует также Type.InvokeMember.
public static class ReflectionExt
{
public static object GetAttr(this object obj, string name)
{
Type type = obj.GetType();
BindingFlags flags = BindingFlags.Instance |
BindingFlags.Public |
BindingFlags.GetProperty;
return type.InvokeMember(name, flags, Type.DefaultBinder, obj, null);
}
}
Что можно использовать как:
object value = ReflectionExt.GetAttr(obj, "PropertyName");
или (как метод расширения):
object value = obj.GetAttr("PropertyName");
Ответ 2
Используйте отражение для этого.
Type.GetProperty()
и Type.GetProperties()
каждый возвращает PropertyInfo
экземпляры, которые могут использоваться для чтения значения свойства для объекта.
var result = typeof(DateTime).GetProperty("Year").GetValue(dt, null)
Type.GetMethod()
и Type.GetMethods()
каждый возвращает MethodInfo
экземпляры, которые могут быть использованы для выполнения метода для объекта.
var result = typeof(DateTime).GetMethod("ToLongDateString").Invoke(dt, null);
Если вы не обязательно знаете тип (который был бы немного странным, если вы новичок в имени свойства), вы также можете сделать что-то подобное.
var result = dt.GetType().GetProperty("Year").Invoke(dt, null);
Ответ 3
Да, вы можете сделать это...
typeof(YourObjectType).GetProperty("PropertyName").GetValue(instanceObjectToGetPropFrom, null);
Ответ 4
Вот класс System.Reflection.PropertyInfo, который может быть создан с использованием object.GetType(). GetProperties(). Это можно использовать для проверки свойств объекта с помощью строк. (Аналогичные методы существуют для методов объектов, полей и т.д.)
Я не думаю, что это поможет вам в достижении ваших целей. Вероятно, вы должны просто создавать и манипулировать объектами напрямую. Элементы управления имеют свойство Name, которое вы можете установить, например.