Установите PropertyName, используя значение переменной - PullRequest
0 голосов
/ 29 марта 2012

Я хочу создать свойство класса и установить имя этого свойства, используя значение переменной.

Например:

string resultValue = "stack"; 
MyClass myclass = new MyClass();
myclass.resultValue = "overflow";

Теперь здесь, в этом случае, stackэто имя свойства, а "overflow" это значение свойства stack.

Пожалуйста, расскажите, как это возможно.

Заранее спасибо.

Ответы [ 7 ]

3 голосов
/ 29 марта 2012

Вы можете использовать Отражение .Например:

string name = "stack";
string value = "overflow";
PropertyInfo pi = typeof(MyClass).GetProperty(name);
MyClass instance = new MyClass();
pi.SetValue(instance, value, null);
// at this stage instance.stack equals to "overflow"

Очевидно, что MyClass имеет стек открытых свойств с открытым сеттером:

public class MyClass
{
    public string stack { get; set; }
}
1 голос
/ 29 марта 2012

Вы должны использовать Reflection для этого

MyClass myclass = new MyClass();
Type type = typeof(MyClass);
PropertyInfo property = type.GetProperty("stack");
property.SetValue(myclass, "overflow", null);
0 голосов
/ 29 марта 2012

Посмотрите на FastMember

Марка Гравелла. Он позволяет динамически устанавливать свойства.

// obj could be static or DLR 
var wrapped = ObjectAccessor.Create(obj); 
string propName = // something known only at runtime 

Пост в блоге FastMember

0 голосов
/ 29 марта 2012

Может быть, вам стоит взглянуть на DynamicObject. При этом вы можете создавать свойства во время выполнения, просто присваивая значение. Пример также можно найти в статье MSDN .

0 голосов
/ 29 марта 2012

Я не могу представить, почему вы хотите создать свойство для вашего класса, но подумайте о других способах. Например. используя Dictionary:

class MyClass
{
    Dictionary<string, object> _values = new Dictionary<string, object>();

    public object this[string name]
    {
        get
        {
            if (!_values.ContainsKey(name))
                throw new ArgumentException(name);

            return _values[name];
        }

        set
        {
            if (!_values.ContainsKey(name))
            {
                _values.Add(name, value);
                return;
            }

            _values[name] = value;
        }
    }
}

Использование:

MyClass myClass = new MyClass();
myClass["stack"] = "overflow";
Console.WriteLine(myClass["stack"]);
0 голосов
/ 29 марта 2012

Я думаю, что раздел Динамическая генерация и компиляция исходного кода в MSDN должен содержать необходимую информацию.

.NET Framework включает механизм, называемый объектом кода документаМодель (CodeDOM), которая позволяет разработчикам программ, генерирующих исходный код, генерировать исходный код на нескольких языках программирования во время выполнения на основе единой модели, представляющей код для рендеринга.

Я думаю, что выможно также сделать это, используя Reflection .

0 голосов
/ 29 марта 2012

Насколько я знаю, это невозможно. Вы можете попробовать использовать словарь.

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