| 

.NET C# Java Javascript Exception

3
Der Compiler meckert wenn man in einer generischen Methode
public T Foo(){
T returnValue = null; // hier muss statt null default(T) gewählt werden
//code
return returnValue;
}


Warum reicht hier ein simples 'null' nicht, es wird ja auch ein null erzeug!
News:
31.07.2009
Serda 455 2 7
2 Antworten
8
Null würde nur mit Referenztypen funktionieren. Bei generischen Methoden können auch Werttypen (wie zB int) verwendet werden. Bei Werttypen ist null nicht möglich -> daher wird default verwendet.

default gibt für Werttypen 0 und für Referenztypen null zurück.

Wenn du null verwenden willst kannst du den generischen Typ einschränken:

public T Foo() where T : class
{
T returnValue = null;
//code
return returnValue;
}
31.07.2009
gfoidl 9,4k 3 5
7
default(T) gibt übrigens für structs nicht immer 0 zurück, sondern z.B. für floats auch 0.0. Für eigene structs wie diese:

struct Name
{
public string Vorname;
public string Nachname;
}


werden rekursiv alle Felder auf default(T) gesetzt. Das ist genau dasselbe wie wenn du sagst:
Name n = new Name();
31.07.2009
jor 791 2 7
2
Sehr gute Anmerkung!
gfoidl 31.07.2009

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH