2008-11-19 14 views
6

क्याअशक्त अंतर

if(null==object) 

और

if(object==null) 

के बीच का अंतर ऊपर प्रयोग करने के लिए लाभ दे कृपया है। संकलक त्रुटि
if (object = null) - - बग

if (null = object):

उत्तर

12

अंतर अगर आप गलती से बजाय = टाइप == का आता है!

+0

सी # में बूलियन परिणाम के स्थान पर असाइनमेंट ऑपरेटर का उपयोग करके एक संकलन समय त्रुटि है। – Pradeep

+0

जो जानना अच्छा है .. लेकिन सवाल मूल रूप से 'सी #' चिह्नित नहीं किया गया था: डी – warren

+0

दरअसल ... मैंने टैग – Greg

3

कोई फर्क नहीं पड़ता। (शून्य == ऑब्जेक्ट) सी/सी ++ से एक अभ्यास है, जहां "=" दोनों असाइनमेंट ऑपरेटर के रूप में उपयोग किया जाता है, और तुलना ऑपरेटर के रूप में।

अगर (ऑब्जेक्ट = नल) का उपयोग किया गया था तो बहुत सारी त्रुटियां थीं।

+0

अब, बहादुर बनें, और मुझे बताएं कि यह क्यों मतदान किया गया है। –

+0

मेरे पास इस पोस्ट के साथ कोई संबंध नहीं है, लेकिन किसी ने अभी इसे क्यों वोट दिया? मैं मानता हूं कि यह राय को डुप्लिकेट कर रहा है लेकिन फिर मतदान करने वाले व्यक्ति के बजाय बस इतना रखना चाहिए। – Pradeep

+0

क्योंकि मूल रूप से सबमिट किए गए उत्तर न तो पूर्ण थे और न ही सहायक थे - "कोई अंतर नहीं" पर्याप्त नहीं है :) – warren

2

कुछ if (null == object) पसंद करते हैं ताकि अगर आप गलती से के बजाय = टाइप करें, तो आपको असाइनमेंट के बजाय संकलन त्रुटि मिलती है।

+0

... यदि आप सी या सी ++ का उपयोग कर रहे हैं, और चेतावनी पूरी तरह से ऊपर नहीं मिली है। –

2

तार्किक रूप से, कोई फर्क नहीं पड़ता। यदि आप याद आती है क्योंकि एक चिह्न (=) के बराबर होती है, संकलक आप जानते हैं कि आप एक निरंतर करने के लिए एक काम नहीं कर सकते करने देगा

एक त्रुटि को देखने के बिंदु जाँच से, पहले अधिक वांछनीय है।

0

कई भाषाओं में == तुलना ऑपरेटर = असाइनमेंट ऑपरेटर है।

टाइप करना बहुत आसान है = जब आप वास्तव में मतलब ==।

इसलिए टाइपिंग निरंतर == चर के सम्मेलन को प्राथमिकता दी जाती है।

स्थिर = परिवर्तनीय इस प्रकार आपको आपकी त्रुटि, संकलित नहीं करेगा।

चर = निरंतर संकलित होगा और रनटाइम पर गलत काम करेगा।

public static class ObjectExtensions 
{ 
    public static bool IsNull(this object target) 
    { 
     return null == target; 
    } 
} 

अब, आप इसके बारे में पूरी तरह से भूल सकता है:

4

ठीक है, यहाँ कुछ मैं एक तरह से की तरह ... उपयोग एक्सटेंशन है

if(item.IsNull()) 
+0

मुझे यह पसंद नहीं है। मुझे लगता है कि एक्सटेंशन के साथ बहुत दूर जा रहा है। साथ ही, मुझे सदस्य चर पर स्थैतिक विधियों को कॉल करना पसंद नहीं है। और उसके बाद इसे एक वैरिएबल पर एक विधि को कॉल करने वाले व्यक्ति को देखने के लिए एक डबल लेना भी आवश्यक है जो संभावित रूप से शून्य हो सकता है। ... लेकिन यह मुझे लगता है कि काम करता है। – BobbyShaftoe

+0

तो, संक्षेप में, आपको विस्तार विधियों को पसंद नहीं है ... –

6

अच्छे पुराने दिनों में, compilers होगा खुशी से आप सशर्त के अंदर असाइनमेंट करते हैं, जिससे अनजाने त्रुटियां होती हैं:

if(a = false) 
{ 
    // I'll never execute 
} 
if(b = null) 
{ 
    // I'll never execute 
} 
b.Method(); // And now I'm null! 

तो कुछ चालाक विकास आरएस ने अपने कंडीशनरों को अपनी सशर्तियों में पहली बार डालना शुरू किया:

if(false = a) // OOPS! Compiler error 
{ 
    // .. 
} 
if(null = b) // OOPS! Compiler error 
{ 
    // .. 
} 

इसलिए उन्होंने स्वयं को त्रुटियों की पूरी कक्षा से बचने के लिए प्रशिक्षित किया। अधिकांश आधुनिक कंपाइलर्स अब आपको उस त्रुटि को नहीं करने देंगे, लेकिन अभ्यास जारी है।

वहाँ एक अन्य लाभ यह हमेशा पहले अपने स्थिरांक डालने के लिए है:

if("OtherString".Equals(myString)) 
{ 
    // .. 
} 
:

if(myString != null && myString.Equals("OtherString")) 
{ 
    // ... 
} 

(नेट, जावा, और एक वस्तु आधारित स्ट्रिंग प्रकार के साथ सबसे अधिक भाषाओं में) करने के लिए कम किया जा सकता

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