Z powodu błędu, który został rozwiązany w C# 4, następujący program wypisuje true
. (Spróbuj go w LINQPad)(to == null) w języku C#!
void Main() { new Derived(); }
class Base {
public Base(Func<string> valueMaker) { Console.WriteLine(valueMaker()); }
}
class Derived : Base {
string CheckNull() { return "Am I null? " + (this == null); }
public Derived() : base(() => CheckNull()) { }
}
w VS2008 w trybie Release, to rzuca InvalidProgramException. (W trybie debugowania działa bez zarzutu)
W VS2010 Beta 2, nie kompiluje (nie wypróbowałem wersji beta 1); Dowiedziałem się, że twardy sposób
Czy istnieje inny sposób, aby this == null
w czystym C#?
To najprawdopodobniej błąd w kompilatorze C# 3.0. Działa tak, jak powinien w C# 4.0. –
Tak, to nie powinno w ogóle kompilować IMO. – leppie
co za ...?! Kto wpada na takie pomysły? Mimo to interesujący błąd, dzięki za udostępnienie –