Задание члена универсального объекта?

public class myclass 
{
    public int mymember { get; set; }  
}

class MySetterClass<T>
{
    // obj.mymember = o for myclass
    public static void SetMember(string membername, object o, ref T obj)
    { 
    }
}

Могу ли я сделать это с помощью Reflection API?

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

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

2 ответа

Решение

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

Если необходимо, код выглядит примерно так, если предположить, что рассматриваемый элемент является свойством, а не полем:

typeof(T).GetProperty(membername).SetValue(obj, o);

Да, ты можешь. Однако, если вы можете сделать это без рефлексии, это было бы лучше, так как рефлексия медленная, громоздкая и сложная для чтения и может указывать на то, что ваш дизайн имеет недостатки.

Я должен спросить, какова ваша конечная цель с этим кодом? Вы действительно хотите просто иметь метод, который устанавливает член на основе строки, именующей этот член? Или вы хотите иметь возможность устанавливать элемент для универсального типа, но знаете, что это такое во время компиляции? Если это последнее, то использование общих ограничений будет полезно. Они позволяют компилятору знать члены объекта универсального типа во время компиляции.

Другие вопросы по тегам