Динамически идентифицирующие свойства в C # - PullRequest
1 голос
/ 10 декабря 2010

Есть ли способ динамически идентифицировать свойства времени разработки в C #?Например:

class MyClass
{
    public string MyProperty1 { get; set; }  
}

А затем сослаться на это примерно так:

string myVar = "MyProperty1";
MyClass.myVar = "test";

Ответы [ 3 ]

6 голосов
/ 10 декабря 2010

Если вы хотите установить значение свойства во время выполнения, а имя свойства известно только во время выполнения, вам нужно использовать Отражение . Вот пример:

public class MyClass
{
    public string MyProperty1 { get; set; }
}

class Program
{
    static void Main()
    {
        // You need an instance of a class 
        // before being able to set property values            
        var myClass = new MyClass();
        string propertyName = "MyProperty1";
        // obtain the corresponding property info given a property name
        var propertyInfo = myClass.GetType().GetProperty(propertyName);

        // Before trying to set the value ensure that a property with the
        // given name exists by checking for null
        if (propertyInfo != null)
        {
            propertyInfo.SetValue(myClass, "test", null);

            // At this point you've set the value of the MyProperty1 to test 
            // on the myClass instance
            Console.WriteLine(myClass.MyProperty1);
        }

    }
}
1 голос
/ 10 декабря 2010

как насчет простой реализации индексатора в вашем классе

public class MyClass
{
    public string MyProperty1 { get; set; }

    public object this[string propName]
    {
        get
        {
            return GetType().GetProperty(propName).GetValue(this, null);
        }
        set
        {
            GetType().GetProperty(propName).SetValue(this, value, null);
        }
    }
}

и тогда вы можете сделать что-то очень похожее

var myClass = new MyClass();
string myVar = "MyProperty1";
myClass[myVar] = "test";
0 голосов
/ 10 декабря 2010

Да, конечно, вы можете.Вам необходимо получить объект FieldInfo, относящийся к свойству, которое вы хотите установить.

var field = typeof(MyClass).GetField("MyProperty1");

, затем из этого информационного объекта поля вы можете установить значение любого экземпляра этого класса.

field.SetValue(myinstanceofmyclass, "test");

См. MSDN: FieldInfo для других забавных вещей, которые вы можете сделать с отражением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...