Na da habe ich ja was ausgelöst heute Morgen ;-). Grundsätzlich ist das Feedback richtig und ich denke auch, dass hier ein allgemeiner Konsens herrscht. Hätte ich die Anwendung, für die ich das Problem vermeintlich gelöst habe, auch einmal live ausgeführt, hätte ich den Code so wahrscheinlich auch nie veröffentlicht, da es mit dem Null-Result schon bei der ersten Verwendung gekracht hätte (übrigens ein netter Nebeneffekt loser Koppelung und der test-getriebenen Entwicklung: ich schraube stundenlang an einer Webanwendung, ohne sie auch nur einmal im Browser auszuführen und so die einzelnen, losen, Komponenten in Aktion zu sehen *).
Trotzdem möchte ich noch einmal kurz auf Ralf eingehen, der in einem Kommentar auf Ilker schreibt:
"Um der Diskussion willen sage ich deshalb mal: In 80% der Fälle, wo mir jmd sagt, seine Verwendung von Null sei nun aber wirklich unumgänglich, kann ich zeigen, dass es ohne Null nicht schlechter, sondern eher besser ist."
Okay, da bin ich jetzt gespannt :-). Nehmen wir den klassischen Fall:
1: public interface IUserRepository
2: {
3: User GetUserByID(Guid userID);
4: }
Was sollte die Methode GetuserByID nun zurückgeben, wenn kein User mit der angegebenen ID gefunden wird. Null oder nicht null, das ist hier die Frage?
Meine Antwort (zur Dikussion): null.
Begründung: ein "leeres" User-Objekt als Rückgabewert macht für den Aufrufer keinen wirklichen Sinn. Es muss ja sowieso geprüft werdne, ob der User nun gefunden wurde oder nicht - und ob ich nun auf user == null oder user.ID == Guid.Empty prüfe ist egal. Dafür schließe ich mit null aber Seiteneffekte bei unbedachter Verwendung aus, denn es besteht damit gar nicht erst die Gefahr, dass das Objekt noch irgendwo durchgeschliffen und fälschlicherweise verwendet wird, da jeder Zugriff sofort in einer NullReferenceException endet.
Andere Meinungen?
* Disclaimer: natürlich tue ich das abschließend schon, nur gab es in diesem Fall und in diesem Zeitraum dazu keinen Anlass.