Neden VB.NET ve C değeri karşı boş kontrol farkı var#mı?
VB.NET Bu durumda:
Dim x As System.Nullable(Of Decimal) = Nothing
Dim y As System.Nullable(Of Decimal) = Nothing
y = 5
If x <> y Then
Console.WriteLine("true")
Else
Console.WriteLine("false") '' <-- I got this. Why?
End If
Ama C# bu olur:
decimal? x = default(decimal?);
decimal? y = default(decimal?);
y = 5;
if (x != y)
{
Debug.WriteLine("true"); // <-- I got this -- I'm with you, C# :)
}
else
{
Debug.WriteLine("false");
}
Neden bir fark var mı?
CEVAP
VB.NET ve C#.NET farklı dilleri, kullanımı ile ilgili farklı varsayımlar yapan farklı ekipler tarafından inşa edilmiş; bu durumda BOŞ bir karşılaştırma anlamı vardır.
Benim kişisel tercihi özünde BOŞ anlam verir VB.NET semantik, "henüz bilmiyorum". Sonra 5 karşılaştırılması "henüz bilmiyorum". doğal olarak "henüz bilmiyorum"; BOŞ yani. Bu (çoğu, hepsi değilse) SQL veritabanında NULL davranışları yansıtma ek bir avantaja sahiptir. Bu da daha fazla standart C den (#'In) üç değerli here açıklandığı gibi mantık, yorumlama.
C# takım NULL ne anlama geldiği konusunda farklı varsayımlar, davranış farkı sonuçlanan yaptı. Eric Lippert wrote a blog about the meaning of NULL in C#. Eric Lippert başına: "ben de VB / null semantiği ve here here JScript yazdı hakkında VBScript".
Hangi NULL değerleri mümkün olan her ortamda Dışlanan Orta (A veya ~Bir ıe tautologically true) Yasası artık dayanıyordu olabilir tanımak önemlidir.
Güncelleme:
bool
bool?
(farklı olarak) sadece DOĞRU ve YANLIŞ değerlerini alabilir. Ancak NULL dili bir uygulama BOŞ ifadeler ile yayar nasıl karar vermelidir. İfadeler VB 5=null
5<>null
yanlış dönüş. C#, benzer ifadeleri 5==null
5!=null
sadeceikinciilk[2014-03-02 - PG updated]false değerini döndürür. Ancak, boş destekleyen HERHANGİ bir ortamda, programcı üzerine düşen doğruluk tabloları ve boş yayma dil tarafından kullanılır.
Neden ve'boş ve tanımsız arasında...
Bir değeri olmadığını kontrol Yakut bi...
Kontrol özel durumlar karşı dava...
C# neden Dize değeri bir tür gibi davr...
Nasıl (javascript) dizi değeri boş vey...