मैंने हमेशा यह माना है कि DbNull.value एक सिंगलटन था। और इस तरह आप इस तरह की बातें कर सकता है:जब मैं XmlSerialiser का उपयोग कर इसे deserialise करता हूं तो मेरा डीबीएनएल एक सिंगलटन क्यों नहीं है?
VB.NET:
If someObject Is DbNull.Value Then
...
End if
सी #:
If (someObject == DbNull.Value)
{
...
}
लेकिन हाल ही में, मैं XmlSerialiser का उपयोग कर एक DBNull उदाहरण धारावाहिक और अचानक यह नहीं था एक सिंगलटन अब और भी। तुलना तुलनात्मक संचालन टाइप करें (जैसे सी # एस (ओबीजे डीबीएनएल है)) ठीक है हालांकि काम करते हैं।
कोड इस प्रकार है:
[Serializable, System.Xml.Serialization.XmlInclude(typeof(DBNull))]
public class SerialiseMe
{
public SerialiseMe() { }
public SerialiseMe(object value)
{
this.ICanBeDbNull = value;
}
public Object ICanBeDbNull { get; set; }
}
public void Foo()
{
var serialiseDbNull = new SerialiseMe(DBNull.Value);
var serialiser = new System.Xml.Serialization.XmlSerializer(typeof(SerialiseMe));
var ms = new System.IO.MemoryStream();
serialiser.Serialize(ms, serialiseDbNull);
ms.Seek(0, System.IO.SeekOrigin.Begin);
var deSerialisedDbNull = (SerialiseMe)serialiser.Deserialize(ms);
// Is false, WTF!
var equalsDbNullDeserialised = deSerialisedDbNull.ICanBeDbNull == DBNull.Value;
// Is false, WTF!
var refEqualsDbNullDeserialised = object.ReferenceEquals(deSerialisedDbNull.ICanBeDbNull, DBNull.Value);
// Is true.
var convertIsDbNullDeserialised = Convert.IsDBNull(deSerialisedDbNull.ICanBeDbNull);
// Is true.
var isIsDbNullDeserialised = deSerialisedDbNull.ICanBeDbNull is DBNull;
}
क्यों यह मामला है? और यह कैसे होता है? और क्या यह संभवतः किसी अन्य स्थिर क्षेत्रों के साथ हो सकता है?
पीएस: मुझे पता है कि वीबी कोड नमूना संदर्भ तुलना कर रहा है और सी # ऑब्जेक्ट को कॉल कर रहा है। एक्वाल्स। दोनों के पास डीबीएनयूएल के साथ एक ही व्यवहार है। मैं आमतौर पर वीबी के साथ काम करता हूं।
मैं कुछ घंटों के लिए काफी समानता से गड़बड़ कर रहा हूं ... मैंने आईएस डीबीएनयूएल को भी आजमाने की कोशिश नहीं की। – Feign