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