मैं यहां ज्यादातर पोस्टों से सहमत हूं, जो की ओर रुख करते हैं null
।
मेरा तर्क यह है कि गैर-अशक्त गुणों के साथ एक खाली वस्तु उत्पन्न करने से कीड़े हो सकते हैं। उदाहरण के लिए, एक int ID
संपत्ति वाली इकाई का प्रारंभिक मूल्य होगा ID = 0
, जो पूरी तरह से वैध मूल्य है। उस वस्तु को, किसी परिस्थिति में, डेटाबेस में सहेजा जाना चाहिए, यह एक बुरी बात होगी।
एक पुनरावृत्ति के साथ किसी भी चीज के लिए मैं हमेशा खाली संग्रह का उपयोग करूंगा । कुछ इस तरह
foreach (var eachValue in collection ?? new List<Type>(0))
मेरी राय में कोड गंध है। संग्रह गुण कभी भी अशक्त नहीं होना चाहिए।
एक किनारे का मामला है String
। बहुत से लोग कहते हैं, String.IsNullOrEmpty
वास्तव में आवश्यक नहीं है, लेकिन आप हमेशा एक खाली स्ट्रिंग और अशक्त के बीच अंतर नहीं कर सकते। इसके अलावा, कुछ डेटाबेस सिस्टम (ओरेकल) उन दोनों के बीच अंतर नहीं करेगा ( ''
संग्रहीत के रूप में DBNULL
), इसलिए आप उन्हें समान रूप से संभालने के लिए मजबूर हैं। इसका कारण यह है, अधिकांश स्ट्रिंग मान या तो उपयोगकर्ता इनपुट से या बाहरी सिस्टम से आते हैं, जबकि न तो टेक्स्टबॉक्स और न ही अधिकांश एक्सचेंज स्वरूपों में ''
और के लिए अलग-अलग प्रतिनिधित्व हैं null
। इसलिए यदि उपयोगकर्ता कोई मूल्य निकालना चाहता है, तो भी वह इनपुट नियंत्रण को समाप्त करने से अधिक कुछ नहीं कर सकता है। इसके अलावा, अशक्त और गैर-अशक्त nvarchar
डेटाबेस फ़ील्ड का अंतर संदिग्ध से अधिक है, यदि आपका DBMS अलंकृत नहीं है - एक अनिवार्य फ़ील्ड जो अनुमति देता है''
अजीब है, आपका यूआई इसे कभी भी अनुमति नहीं देगा, इसलिए आपकी बाधाएं मैप नहीं होती हैं। तो यहाँ जवाब, मेरी राय में, उन्हें समान रूप से, हमेशा संभालना है।
अपवादों और प्रदर्शन के संबंध में अपने प्रश्न के बारे में: यदि आप एक अपवाद को फेंक देते हैं, जिसे आप अपने प्रोग्राम लॉजिक में पूरी तरह से संभाल नहीं सकते हैं, तो आपको कुछ बिंदु पर, जो भी आपका प्रोग्राम कर रहा है, उसे निरस्त करना होगा, और उपयोगकर्ता से पूछें कि उसने जो भी किया है उसे फिर से करें। उस स्थिति में, प्रदर्शन का दंड catch
वास्तव में आपकी चिंताओं का कम से कम है - उपयोगकर्ता से पूछना है कि कमरे में हाथी है (जिसका अर्थ है पूरे यूआई को फिर से प्रस्तुत करना, या इंटरनेट के माध्यम से कुछ HTML भेजना)। इसलिए यदि आप " प्रोग्राम फ़्लो विथ एक्सेप्शन " के एंटी-पैटर्न का पालन नहीं करते हैं, तो परेशान न हों, अगर यह समझ में आता है तो बस एक फेंक दें। यहां तक कि सीमा मामलों में, जैसे "मान्यता अपवाद", प्रदर्शन वास्तव में एक मुद्दा नहीं है, क्योंकि आपको उपयोगकर्ता से किसी भी मामले में फिर से पूछना होगा।
if (!DataExists)
।