динамический в C #, устанавливающий значение свойства

#c#

#c#

Вопрос:

Мне нужно установить свойство для объекта

 Personi p = new Personi();//this class has a property Datelindja(DateTime)
p.Emri = "Florim";
p.Mbiemri = "Maxhuni";
SetValue(p, "Datelindja", DateTime.Now); //I nead these method. using dynamic keyword
Console.WriteLine(p.Ditelindja);
  

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

сигнатура метода

 SetValue(dynamic orgObj, string property, dynamic value)
  

Извините за мой плохой английский.

Ответ №1:

Я не понимаю, зачем вам это нужно dynamic здесь.
SetValue нужно будет использовать отражение:

 void SetValue<TInstance, TValue>(TInstance orgObj, string property, TValue value)
{
    orgObj.GetType().GetProperty(property).SetValue(orgObj, value, null);
}
  

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

 void SetValue(object orgObj, string property, object value)
{
    orgObj.GetType().GetProperty(property).SetValue(orgObj, value, null);
}
  

Ответ №2:

В проекте с открытым исходным кодом Dyamitey есть метод Dynamic.InvokeSet , который использует DLR для выполнения этого. Хотя в вашем примере вы действительно можете использовать отражение, поскольку сам объект не является IDynamicMetaObjectProvider, но при использовании Dynamic (dlr) он не только будет более гибким, но и в среднем в 3 раза быстрее, чем reflection.

 Dynamic.InvokeSet(p,"Datelindja", DateTime.Now)