Задание члена общего объекта? - PullRequest
0 голосов
/ 13 января 2011
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 ]

0 голосов
/ 13 января 2011

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

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

0 голосов
/ 13 января 2011

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

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

typeof(T).GetProperty(membername).SetValue(obj, o);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...