दिलचस्प पोस्ट
Mysql चुनिंदा क्वेरी में दो तिथियों के बीच दिनांक की सूची कैसे प्राप्त करें एक क्वेरी में एएनएसआई 1992 के जॉन्स और कमांड्स को मिलाते हुए आईओएस एप का नाम कैसे बदल सकता है? गैरकानूनीस्टेट अपवाद जब एक टुकड़ा की जगह यह निर्धारित करना कि वस्तु ऑब्जेक्ट VBA में एक संग्रह का सदस्य है एक्लिप्स का एसआरसी फ़ोल्डर खाली है (मेनएक्टिविटी क्लास नहीं बनाया गया) ईक्लीप्से का उपयोग कर एक नया एंड्रॉइड प्रोजेक्ट बनाने के बाद ASP.NET MS11-100: मैं पोस्ट किए गए फार्म मूल्यों की अधिकतम संख्या को कैसे बदल सकता हूँ? पूर्ण / स्थिर बच्चों के साथ मूल कंटेनर की ऑटो ऊंचाई अधिक से अधिक / कम-से-कम के लिए स्विच स्टेटमेंट .NET Framework 4.5 निर्देशिका कहाँ है? कैसे omp आदेश खंड का काम करता है? सी #: स्मृति अपवाद के बाहर क्यों getchar () कंसोल पर EOF के रूप में वापस पहचान नहीं करता है? नकारात्मक संख्याओं के साथ मॉड्यूलो ऑपरेशन सीएक्सएफ या जेएक्स-डब्लूएस जेनरेटेड webservice क्लाइंट में डब्ल्यूएसडीएल स्थान को निर्दिष्ट करने की आवश्यकता से कैसे बचें?

सशर्त त्रिगुट ऑपरेटर का प्रयोग करके लैम्ब्डा के बीच एक फोंक <> सशर्त रूप से मैं कैसे आवंटित कर सकता हूं?

आम तौर पर, सशर्त ऑपरेटर का उपयोग करते समय, यहाँ वाक्यविन्यास है:

int x = 6; int y = x == 6 ? 5 : 9; 

कुछ फैंसी नहीं, बहुत सीधे आगे।

अब, इसका उपयोग करने का प्रयास करते हैं जब एक लम्ब्डा को फ़नक प्रकार से निर्दिष्ट करते हैं। मुझे समझाने दो:

 Func<Order, bool> predicate = id == null ? p => p.EmployeeID == null : p => p.EmployeeID == id; 

वही वाक्यविन्यास है, और काम करना चाहिए ? सही? किसी कारण से ऐसा नहीं है संकलक इस गुप्त संदेश को देता है:

त्रुटि 1 सशर्त अभिव्यक्ति का प्रकार निर्धारित नहीं किया जा सकता क्योंकि 'लैम्ब्डा अभिव्यक्ति' और 'लैम्ब्डा अभिव्यक्ति' के बीच कोई अंतर्निहित रूपांतरण नहीं है

तब मैंने आगे बढ़कर वाक्यविन्यास बदल दिया और इस तरीके से काम किया:

 Func<Order, bool> predicate = id == null ? predicate = p => p.EmployeeID == null : predicate = p => p.EmployeeID == id; 

मैं बस इतना ही उत्सुक हूँ कि यह पहला रास्ता क्यों नहीं चला?

(साइड नोट: मुझे इस कोड की जरूरत नहीं है, क्योंकि मुझे पता चला है कि जब आप शून्य के साथ एक इंट मान की तुलना करते हैं, तो आप ऑब्जेक्ट का उपयोग करते हैं।

वेब के समाधान से एकत्रित समाधान "सशर्त त्रिगुट ऑपरेटर का प्रयोग करके लैम्ब्डा के बीच एक फोंक <> सशर्त रूप से मैं कैसे आवंटित कर सकता हूं?"

आप लैम्ब्डा अभिव्यक्ति को किसी विशेष लक्ष्य प्रतिनिधि के रूप में परिवर्तित कर सकते हैं, लेकिन सशर्त अभिव्यक्ति के प्रकार को निर्धारित करने के लिए, संकलक को प्रत्येक दूसरे और तीसरे ऑपरेंड के प्रकार को जानने की आवश्यकता है। जब वे दोनों ही "लैम्ब्डा अभिव्यक्ति" हैं, तो एक से दूसरे तक कोई रूपांतरण नहीं होता है, इसलिए संकलक कुछ उपयोगी नहीं कर सकता है।

मैं एक असाइनमेंट का उपयोग करने का सुझाव नहीं देता, हालांकि – एक कलाकार अधिक स्पष्ट है:

 Func<Order, bool> predicate = id == null ? (Func<Order, bool>) (p => p.EmployeeID == null) : p => p.EmployeeID == id; 

ध्यान दें कि आपको इसे केवल एक ऑपरेंड के लिए प्रदान करने की आवश्यकता है, इसलिए संकलक दूसरे लैम्ब्डा अभिव्यक्ति से रूपांतरण कर सकता है।

सी # संकलक निर्मित लैम्ब्डा अभिव्यक्ति के प्रकार का अनुमान नहीं लगा सकता क्योंकि यह पहले त्रिभुज की प्रक्रिया करता है और फिर असाइनमेंट होता है। आप यह भी कर सकते हैं:

 Func<Order, bool> predicate = id == null ? new Func<Order,bool>(p => p.EmployeeID == null) : new Func<Order,bool>(p => p.EmployeeID == id); 

लेकिन यह सिर्फ बेकार है, आप भी कोशिश कर सकते हैं

 Func<Order, bool> predicate = id == null ? (Order p) => p.EmployeeID == null : (Order p) => p.EmployeeID == id;