Kullanmanız gereken örnekte anlamsızdır.
bu durumda böyle bir olanak, bazen eklendi (ya da en azından varsayılan (T önce yoktu) boş döküm için ihtiyaç vardır aşağıdaki düşünün:.
void DoSomething(string x) {
...
}
void DoSomething(object x) {
...
}
DoSomething(null); // compiler can't infer the type
DoSomething((string)null); // string type is now explicit
DoSomething(default(string)); // same as previous
Edit
Eşitlik testi yapılırken döküm işlemini yapmak zorunda kalacağınız başka bir durum düşünün.Aşırı yüklenmiş bir işleve sahip iki nesneyle karşılaştırmaya izin veren bir işleçiniz varsa, null ile karşılaştırmak belirsiz olacaktır.Ancak IQueryableContext çoğu Muhtemelen bir arabirim ve arabirimler overlo olamaz == işleci adında, verdiğiniz örnekte hala geçerli bir sebep göremiyorum.
class CustomObject {
private string _id;
public CustomObject(string id) {
_id=id;
}
public static bool operator ==(CustomObject lhs, CustomObject rhs) {
if (ReferenceEquals(lhs, rhs)) { return true; }
if (ReferenceEquals(lhs, null)) { return false; }
if (ReferenceEquals(rhs, null)) { return false; }
return lhs._id == rhs._id;
}
public static bool operator !=(CustomObject lhs, CustomObject rhs) {
return !(lhs == rhs);
}
public static bool operator ==(CustomObject lhs, string rhs) {
if (ReferenceEquals(lhs, rhs)) { return true; }
if (ReferenceEquals(lhs, null)) { return false; }
if (ReferenceEquals(rhs, null)) { return false; }
return lhs._id == rhs;
}
public static bool operator !=(CustomObject lhs, string rhs) {
return !(lhs==rhs);
}
}
CustomObject o = null;
if (o == null) {
Console.WriteLine("I don't compile.");
}
Null'ın null olduğu için hiçbir nedeninin olduğunu sanmıyorum - hiçbir türü yok. Bazılarına uyuyor olabilirler * sadece eşitlik * argümanı için aynı tipteki nesneleri kontrol etmelisiniz, ama bana göre biraz gülünç görünebilir ... –
Belki de okunabilirlik/kendini belgelemek için olduğunu düşünüyorlar mı? – Alan
Bu sınıf alan modelinde nerede? – R0MANARMY