ऑफटाइप() कैसे काम करता है?ऑफ़टाइप <T>() कार्य कैसे करता है?
मैंने this link पढ़ा है कि क्या हो रहा है, लेकिन LINQ प्रदाता वास्तव में निर्दिष्ट प्रकार से मेल खाने वाली सभी वस्तुओं को कैसे प्राप्त करता है। मुझे IQueryable<T>
अनुरोधों को "चेन" पता है और फिर GetEnumerator()
कहलाता है (दाएं?) का मूल्यांकन करता है।
विशेष रूप से मैं जानना चाहता हूं कि ढांचा कैसे तुलनात्मक रूप से तुलना करता है?
public IEnumerable<TResult> OfType<TResult>()
where TResult : class
{
foreach (TItem item in this.InnerList)
{
TResult matchItem = item as TResult;
if (matchItem != null)
{
yield return matchItem;
}
}
}
यह सबसे अच्छा कार्यान्वयन है: मैं एक .NET 2.0 परियोजना है कि (2.0 के बाद से सुविधाओं के इस तरह का समर्थन नहीं करता) इस तरह से चला गया में एक विधि लिखा?
संपादित करें: इस OfType<T>()
के साथ मेरी मुख्य चिंता यह है कि यह तेज है।
तो यह 'is' का उपयोग करना तेज़ है और फिर मूल्य प्रकारों को शामिल करने के कारण यह कास्ट किया गया है या नहीं? मैंने सोचा कि के रूप में उपयोग करना और फिर शून्य की जांच करना तेज है? – TheCloudlessSky
यह संभव है कि अंतर विशिष्ट संकलक अनुकूलन के कारण अप्रासंगिक है। –
@TheCloudlessSky: यदि विधि केवल रेफरी प्रकारों से निपटने के लिए बाध्य थी, तो मैं पहले से ही कर चुके 'as'/test-for-null संयोजन का उपयोग करूंगा। 'Is'/cast और' as'/test-for-null का उपयोग करने के बीच गति अंतर नगण्य होगा, लेकिन यदि माइक्रो-ऑप्टिमाइज़ेशन का स्तर आपके लिए महत्वपूर्ण है तो मेरा सुझाव है कि आप कुछ बेंचमार्किंग करें। – LukeH