2009-04-18 14 views
8

मैंने समय और समय फिर से एपीआई (विशेष रूप से .NET ढांचे में) देखा है जो Func<TObject, bool> का उपयोग करता है जब Predicate<TObject> प्रतीत होता है कि यह पूरी तरह उत्तरदायी विकल्प है। क्या अच्छा कारण एपीआई डिजाइनर ऐसा करने के लिए हो सकता है?Func <tobject, bool> या भविष्यवाणी <TObject>?

उत्तर

7

LINQ में, Func<T, bool>Where ताकि जैसी चीजों के लिए प्रयोग किया जाता है अन्य अधिभार जो तत्व के रूप में रूप में अच्छी तरह सूचकांक लेता संगत है:

IEnumerable<T> Where(IEnumerable<T> source, Func<T, bool> predicate) 
IEnumerable<T> Where(IEnumerable<T> source, Func<T, int, bool> predicate) 

निजी तौर पर मुझे लगता है कि नाम Predicate और वर्णनात्मक है, इसलिए मैं जहां ऊपर की तरह कोई स्थिरता मुद्दा नहीं है स्थितियों में यह प्रयोग करेंगे। आपको याद है, केवल Action और Func प्रतिनिधि प्रकारों के बारे में जानने की आवश्यकता है ...

+0

हां, मुझे डर है कि जवाब इस से बेहतर नहीं होगा। यह कुछ प्रकार के कोड नौकरशाही की तरह शुद्धता के एक पहलू पर जीता है। (यानी स्थिरता के बावजूद हमेशा पूर्वानुमान का उपयोग किया जाना चाहिए)। –

2

बाकी LINQ के साथ संगति?

("विसंगति" उल्लेख किया गया है, लेकिन अनाम प्रतिनिधियों और लैम्ब्डा कार्यों के साथ यह कोई फर्क नहीं तो अंतर के बारे में पता करने की आवश्यकता है लगभग कभी नहीं बनाता है।)

+0

हां, लेकिन LINQ ने ऐसा क्यों किया? –

+0

मुझे यह भी नहीं लगता कि बाकी LINQ के साथ "स्थिरता" अच्छा कारण है। –

+0

एक संभावना के लिए जॉन का जवाब देखें। – Richard

0

समारोह <> प्रतिनिधियों "नए हैं "विधियों के लिए lambdas/प्रतिनिधियों को निर्दिष्ट करने का तरीका। हालांकि, वहां प्रतिनिधियों का एक आसान सेट है, और यदि कोई और विशिष्ट प्रतिनिधि है जो वही काम करता है तो उसके लिए जाएं।

अपने उदाहरण में मैं हमेशा विधेय <> यह बहुत ज्यादा आत्म दस्तावेज़ीकृत कर के रूप में के लिए जाना चाहते हैं (एक विधेय संभालने तुम क्या चाहते है)

संबंधित मुद्दे