Zgadza się, jeśli chcemy mieć więcej informacji, to wtedy dodajemy jakąś klasę, która ma np. dwa pola: status i user. Ale jeśli status jest różny niż OK, to wtedy user w zupełności może być nullem, bo sprawdzamy najpierw zawsze status.

Mniej więcej o takie kuriozum, jak rozpisałeś mi chodziło. I teraz tak. Mamy metodę GetUserById. Ona ma zwrócić listę użytkowników. I teraz rodzi się pytanie, czy to jest w jej gestii sprawdzanie, czy dany użytkownik istnieje? Czy wtedy taka metoda nie robi już za dużo? (single responsibility)

A otrzymując listę z nullami, możemy po prostu sprawdzić:

foreach(User u in users)
{
  if(u != null)
    ProcessUser(u);
}

Bez nulla, możemy zrobić prostszy zapis - zgoda:

foreach(User u in users)
{
    ProcessUser(u);
}

Ale gdzieś jakieś sprawdzenie w końcu musi być, żeby nie dopuścić albo do błędnych wyników, albo do Null exception.