2010-11-01 11 views
14

Jak rozumiem domyślny (obiekt), gdzie "obiekt" jest dowolnym typem odniesienia, zawsze zwraca wartość null, ale czy mogę określić, co jest domyślne? Na przykład, chcę domyślny (obiekt) == nowy obiekt();Określ domyślną wartość dla typu odniesienia

+1

Nie, to niemożliwe. Czy możesz nam powiedzieć, jaki jest ostateczny cel, czyli dlaczego chcesz tę funkcję? – Ani

+0

Nie. I dlaczego miałbyś to robić? Jeśli obiekt ma wartość NULL, po prostu przypisz nowy! –

+1

Wystarczy, że powiemy FirstOrDefault() i nigdy nie otrzymamy wartości NULL. Chyba po prostu napiszę nową metodę rozszerzenia. –

Odpowiedz

25

nr default(type) zawsze zwraca to samo - „zero” ed "wersja tego typu. W przypadku typu odniesienia jest to uchwyt do obiektu, który zawsze jest ustawiony na wartość zero - co odpowiada null. Dla typu wartości jest to zawsze struktura z wszystkimi elementami ustawionymi na zero.

Nie można zmienić tego zachowania - specyfikacja języka została zaprojektowana w ten sposób.


Edit: Co do Twojego komentarza:

Żeby móc powiedzieć FirstOrDefault() i nigdy nie uzyskać null.

Nie polecam tego w żadnym wypadku. Użytkownicy oczekują, że FirstOrDefault() zwróci null w przypadku niepowodzenia. Byłoby lepiej napisać własną metodę rozszerzenia:

static T FirstOrNewInstance<T>(this IEnumerable<T> sequence) where T : class, new() 
{ 
    return sequence.FirstOrDefault() ?? new T(); 
} 
3

Niestety, nie jestem Jon Skeet ...

Ale tak czy inaczej, odpowiedź brzmi „nie można nie”

+6

Zwykle Jon Skeet wyjaśnia, dlaczego (lub dlaczego nie w tym przypadku) :) – PostMan

+0

@PostMan, jak powiedziałem, nie jestem Jon Skeet;). W każdym razie, nie sądzę, że tu jest cokolwiek do wyjaśnienia ... to po prostu niemożliwe. –

+0

Po prostu wymyśl, wszystko będzie dobrze :) Ale tak, zgadzam się, nie ma żadnego wyjaśnienia poza tym, że nie możesz. (inne niż to jest decyzja projektowa) – PostMan

Powiązane problemy