Bunu istiyorum düşünüyorum:
Action<T, object> setValue = (t, o) => property.GetSetMethod().Invoke(t, new object[] { o });
veya
Action<T, object> setValue = (t, o) => property.SetValue(t, o, null);
DÜZENLEME
bu yöntemi varsayalım, kabul edilen yanıt ile karşılaştırıldığında bu cevabın kabul yoksul performans göstermek için :
void SetAnObjectPropertyOnALotOfObjects<T>(IEnumerable<T> objs)
{
//Create a delegate and assign a reference to that delegate to the setValue variable
Action<T, object> setValue = GetSetter();
foreach (var o in objs)
{
//invoke the delegate referred to by the setValue variable (that is, "invoke its referent"
setValue.Invoke(o, new object());
}
}
MerickOWA'nın yanıtı, GetSetter
yönteminde yansıma kullanır; dolayısıyla, yaklaşımında, GetSetter
yönteminin yürütülmesi için daha fazla zaman harcadığını varsayarız. Bu cevap, setValue.Invoke
aradığımız her seferinde yansımayı kullanır, bu nedenle bu cevabın yürütülmesi için daha fazla zaman gerektiğini varsayarız. Sıradaki öğelerin sayısının büyük olduğunu varsayarsak, MerickOWA'nın cevabı yürütmek için daha az zaman gerektirir.
Örneğin, MerickOWA'nın GetSetter yönteminin, yürütmemden X milisaniye daha fazla süre aldığını ve setValue temsilcisinin Y milisaniyesini kendisinden daha fazla aldığını varsayalım. Sırada N öğesi varsa, benim çözümüm (N * Y - X) milisaniye tarafından daha yavaş olmalıdır.
Mülkiyetiniz statik bir özellik midir? Eğer değilse, o zaman boş olamaz. – phoog
Hayır değil, üzgünüm o parçayı özledim, ama sınıfın bir örneğini geçtiğimde bile düzgün çalışmıyorsa, yine de aynı istisnayı elde ediyorum – ChandlerPelhams