मेरा दृष्टिकोण क्या करना है
(object)item == null
जिस पर मैं object
खुद की समानता ऑपरेटर पर भरोसा कर रहा हूं जो गलत नहीं हो सकता। या एक कस्टम एक्सटेंशन विधि (और एक अधिभार):
public static bool IsNull<T>(this T obj) where T : class
{
return (object)obj == null;
}
public static bool IsNull<T>(this T? obj) where T : struct
{
return !obj.HasValue;
}
या अधिक मामलों को संभालने के लिए, हो सकता है:
public static bool IsNull<T>(this T obj) where T : class
{
return (object)obj == null || obj == DBNull.Value;
}
बाधा IsNull
मूल्य के प्रकारों को रोकती है । अब यह कॉलिंग जितना मीठा है
object obj = new object();
Guid? guid = null;
bool b = obj.IsNull(); // false
b = guid.IsNull(); // true
2.IsNull(); // error
जिसका अर्थ है कि मेरे पास नल के लिए जाँच करने की एक सुसंगत / नहीं-त्रुटि-प्रवण शैली है। मैंने यह भी पाया (object)item == null
हैObject.ReferenceEquals(item, null)
कि यह बहुत कम की तुलना में बहुत तेजी से है , लेकिन केवल अगर यह मायने रखता है (मैं वर्तमान में कुछ पर काम कर रहा हूं, जहां मैंने सब कुछ सूक्ष्म रूप से अनुकूलित किया है!)।
समानता चेक लागू करने पर एक संपूर्ण मार्गदर्शिका देखने के लिए, संदर्भ प्रकार के दो उदाहरणों की तुलना करने के लिए "सर्वश्रेष्ठ अभ्यास" क्या है?
Assert.IsFalse(foo2 == foo1);