(क्यों First
का उपयोग करता है, तो आप हमेशा FirstOrDefault
उपयोग कर सकते हैं), वहाँ मामलों में जहां आप कर रहे हैं अपने विशिष्ट सवाल का सीधा जवाब दें करने के लिए FirstOrDefault
का उपयोग नहीं कर सकते, क्योंकि यह जानकारी खो देता है! "डिफ़ॉल्ट मान" स्रोत सूची में एक मान्य तत्व प्रकार की संभावना है। आपके पास गणना में पहले तत्व के बीच अंतर/डिफ़ॉल्ट बनाम गणना के पहले तत्व के बीच अंतर करने का कोई तरीका नहीं है जब तक कि आप First
का उपयोग न करें या पहले जांचें कि Any
तत्व हैं, जिसके लिए डबल-गणना की आवश्यकता है।
यह विशेष रूप से मूल्य-टाइप किए गए एन्यूमेरबल्स, जैसे कि int[]
के लिए सच है। default(int)
0
है, जो कि सरणी का एक मान्य मान भी है।
सामान्यतः, दो विधियां विभिन्न तार्किक प्रवाह का प्रतिनिधित्व करती हैं। First
का उपयोग किया जाएगा यदि कोई तत्व "असाधारण" (एक त्रुटि) नहीं है, जो तब आपके आवेदन में आउट-ऑफ-बैंड को संभालना चाहता है। इस परिदृश्य में, आप कम से कम एक तत्व होने की अपेक्षा करते हैं। FirstOrDefault
एक खाली सेट पर शून्य देता है, जिसका अर्थ है कि आपको लौटाए गए मूल्य के साथ अतिरिक्त प्रसंस्करण करने की आवश्यकता है। यह Parse
बनाम TryParse
int
/double
/आदि पर विधियों के समान तर्क है। वास्तव में, कुछ तरीकों से आपका प्रश्न स्वयं को अपवादों का उपयोग करने के बारे में अधिक सामान्य प्रश्न के रूप में ले जाता है।
चूंकि First
अपवाद फेंकता है, यह अपवाद प्रदान करने वाले सभी कोड-पुन: उपयोग अवसरों के लिए खुद को उधार देता है। उदाहरण के लिए, आप कर सकते हैं:
try
{
x = arr1.First();
y = arr2.First();
z = arr3.First();
}
catch
{
throw new ArgumentException();
}
स्रोत
2011-12-03 21:29:46
मैं डुप्लिकेट के लिए एक करीबी देख सकता था, लेकिन ... "रचनात्मक नहीं"? :(हालांकि, मुझे लगता है कि सवाल स्पष्टीकरण का उपयोग कर सकता है * क्यों * 'पहला '(त्रुटि-अगर-खाली के साथ) को' FirstOrDefault 'से कम आदर्श माना जाता है। –