मुझे लगता है कि आप इस हैं:
Action<T, object> setValue = (t, o) => property.GetSetMethod().Invoke(t, new object[] { o });
या
Action<T, object> setValue = (t, o) => property.SetValue(t, o, null);
संपादित
इस जवाब को स्वीकार कर लिया जवाब की तुलना में ग्रहण गरीब प्रदर्शन समझाने के लिए, इस विधि मान :
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());
}
}
मरिकोवा का जवाब GetSetter
विधि में प्रतिबिंब का उपयोग करता है, इसलिए हम मानते हैं कि GetSetter
विधि को उसके दृष्टिकोण में निष्पादित करने में अधिक समय लगता है। यह जवाब प्रत्येक बार प्रतिबिंब का उपयोग करता है जब हम setValue.Invoke
पर कॉल करते हैं, इसलिए हम मानते हैं कि इस उत्तर में निष्पादित करने में अधिक समय लगता है। अगर हम मानते हैं कि अनुक्रम में वस्तुओं की संख्या बड़ी है, तो मरिकोवा के उत्तर को निष्पादित करने के लिए कम समय की आवश्यकता होनी चाहिए।
उदाहरण के लिए, मान लीजिए कि मेरिकोवा की गेटसेटर विधि निष्पादित करने के लिए एक्स मिलीसेकंड अधिक लेती है, जबकि मेरा सेट वैल्यू प्रतिनिधि अपने से अधिक वाई मिलीसेकंड लेता है। यदि अनुक्रम में एन आइटम हैं, तो मेरा समाधान उसके (एन * वाई - एक्स) मिलीसेकंड से धीमा होना चाहिए।
क्या आपकी संपत्ति एक स्थिर संपत्ति है? यदि नहीं, तो आप शून्य से गुजर नहीं सकते हैं। – phoog
नहीं, यह नहीं है, माफ करना, मैंने उस टुकड़े को याद किया, लेकिन जब भी मैं कक्षा के उदाहरण में जाता हूं, यह सही तरीके से काम नहीं करता है, मुझे अभी भी एक ही अपवाद मिलता है – ChandlerPelhams