कई कस्टम Enumerable एक्सटेंशन के साथ PLINQ का लाभ उठाते हुए अन्य builtin संचालन के मामले में लागू किया जा सकता - उदाहरण के लिए इस तुच्छ सुविधा विधि:कस्टम Enumerable एक्सटेंशन
public static bool AnyOf<TElement>(this TElement item, IEnumerable<TElement> items)
{
return items.Any(a => EqualityComparer<TElement>.Default.Equals(a, item));
}
अब यह किसी भी PLINQ क्वेरी वापस अनुक्रमिक आपरेशन के लिए विवश करेगा भले ही PLINQ भी एक किसी भी है - और बस सिर्फ एक हस्ताक्षर परिवर्तन के साथ बराबर है:
public static bool AnyOf<T>(this T item, ParallelQuery<T> items)
{
return items.Any(a => EqualityComparer<T>.Default.Equals(a, item));
}
लेकिन मेरे लिए गंदा लगता है इस तरह यह डुप्लिकेट।
पहले तो मैंने सोचा था कि जैसे कुछ नीचे काम कर सकते हैं, लेकिन निश्चित रूप से यह^क्योंकि विस्तार तरीकों स्थिर तरीकों और इसलिए के रूप में करने का विरोध किया ParallelQuery.Any
हस्ताक्षर के आधार पर संकलन समय पर किया जाता है Enumerable.Any
कॉल करने के लिए निर्णय कर रहे हैं नहीं करता है।
public static bool AnyOf<TElement, TEnumerable>(this TElement item, TEnumerable items)
where TEnumerable : class, IEnumerable<TElement>
{
return items.Any(a => EqualityComparer<TElement>.Default.Equals(a, item));
}
मैं इस निष्कर्ष यह एक अलग हस्ताक्षर के साथ प्रत्येक विधि की एक प्रति बनाने के बिना असंभव है पर आए हैं, लेकिन शायद वहाँ कुछ मैं याद किया गया है। (जी हमेशा असंभव सवालों के साथ!)
शायद एक सहायक है कि साथ में चलाना से लाभ होगा की एक बेहतर उदाहरण (जाहिर है श्रृंखलित किया जा सकता है, आदि) कुछ इस तरह है।
public static IEnumerable<string> ToStrings(this IEnumerable<object> ienum)
{
return ienum.Select(a=> a.ToString());
}
^संकलक त्रुटि:
The type 'ParallelQuery<TElement>' cannot be used as type parameter
'TEnumerable' in the generic type or method
'AnyOf<TElement,TEnumerable>(TElement, TEnumerable)'. There is no
implicit reference conversion from 'ParallelQuery<TElement>' to
'IEnumerable<TElement>'
इसके अलावा पर विचार के लायक है कि ParallelQuery की नहीं सभी/Enumerable तरीकों के बराबर हैं, भले ही वे संकलन है।
वास्तविक सवाल क्या है? – jessehouwing
उम्म, गलती। थोड़ा दूर ले गया: "क्या LINQ एक्सटेंशन लिखने का कोई तरीका है जो PLINQ के साथ भी काम करता है?"। – Fowl
क्या आपके सभी एक्सटेंशन विधियां इस छोटी हैं? उनमें से कितने हैं? – svick