Burada gözlemlenen sorun, daha genel bir sorunun özel bir durumudur; en azından bazı durumlarda faydalı olabilecek farklı eşitlik tanımlarının sayısı, bunları ifade etmek için yaygın olarak bulunan araçların sayısını aşmaktadır. Bu sorun, bazı durumlarda, eşitliği test etmenin farklı araçlarının farklı sonuçlar vermesinin kafa karıştırıcı olduğu yönündeki talihsiz bir inançla daha da kötüleştirilir ve bu tür bir kafa karışıklığı, mümkün olduğunda farklı eşitlik biçimlerinin aynı sonuçları vermesini sağlayarak önlenebilir.
Gerçekte, kafa karışıklığının temel nedeni, farklı anlambilimlerin farklı koşullarda yararlı olmasına rağmen, farklı eşitlik ve eşitsizlik testlerinin aynı sonucu vermesinin beklenmesi gerektiğine dair yanlış bir inançtır. Örneğin, aritmetik bir bakış açısından, Decimalyalnızca sondaki sıfırların eşit olarak karşılaştırılmasında farklılık gösterenlere sahip olmak yararlıdır . Aynı şekilde doublepozitif sıfır ve negatif sıfır gibi değerler için . Öte yandan, önbelleğe alma veya interning açısından bu tür anlambilim ölümcül olabilir. Örneğin birinin eşit Dictionary<Decimal, String>olması myDict[someDecimal]gereken bir tür olduğunu varsayalım someDecimal.ToString(). Böyle bir nesne, çok sayıda olsaydı mantıklı görünürdü.Decimaldizeye dönüştürmek istediği ve birçok yinelenen olması beklenen değerler. Ne yazık ki, 12.3 m ve 12.40 m'yi ve ardından 12.30 m ve 12.4 m'yi dönüştürmek için böyle bir önbelleğe alma kullanılırsa, son değerler "12.30" ve "12.4" yerine "12.3" ve "12.40" verir.
Eldeki konuya dönersek, eşitlik açısından sıfırlanabilir nesneleri karşılaştırmanın birden fazla mantıklı yolu vardır. C #, ==operatörünün davranışını yansıtması gereken bakış açısını alır Equals. VB.NET , davranışı isteyen herkesin Equalskullanabileceği için , davranışının diğer dillerinkini yansıtması gerektiği görüşünü alır Equals. Bir anlamda, doğru çözüm, üç yollu bir "if" yapısına sahip olmak ve koşullu ifade üç değerli bir sonuç döndürürse, kodun nulldurumda ne olması gerektiğini belirtmesini gerektirmektir . Bu, diller için bir seçenek olmadığından, bir sonraki en iyi alternatif, farklı dillerin nasıl çalıştığını öğrenmek ve aynı olmadıklarını kabul etmektir.
Bu arada, Visual Basic'in C'de bulunmayan "Is" operatörü, boş değer atanabilir bir nesnenin aslında boş olup olmadığını test etmek için kullanılabilir. Bir iftestin kabul etmesi gerekip gerekmediğini makul bir şekilde sorgulayabilirken , null atanabilir türlerde çağrıldığında yerine Boolean?normal karşılaştırma işleçlerinin dönmesi yararlı bir özelliktir. Bu arada, VB.NET'te, bir kişi yerine eşitlik operatörünü kullanmaya çalışırsa , karşılaştırmanın sonucunun her zaman olacağı ve bir şeyin boş olup olmadığını test etmek isterse kullanılması gerektiği konusunda bir uyarı alacaktır .Boolean?BooleanIsNothingIs