Standard (T) gegen Activator.CreateInstance (T)

8

Ich würde gerne wissen, ob die folgenden Aussagen jemals ein anderes Ergebnis für Referenztypen liefern, oder sind sie identisch?

  1. default(T)
  2. Activator.CreateInstance(T)

Wenn sie identisch sind, könnten Sie in diesem Beispiel immer den Standardwert (T) verwenden, wenn der Standardwert von T ausgegeben werden soll:

%Vor%

Am besten testen, ob Ein generischer Typ ist eine Zeichenfolge? (c #)

ta!

    
Cel 28.08.2011, 17:53
quelle

5 Antworten

14

Sie sind ganz anders.

  1. default(T) , wenn T ein Referenztyp ist, ist immer null .
  2. Activator.CreateInstance<T>() erstellt eine neue Instanz dieses Typs unter Verwendung des Standardkonstruktors, falls vorhanden, andernfalls wird MissingMethodException .
  3. ausgegeben
vcsjones 28.08.2011, 17:56
quelle
5

Bei Referenztypen ist default(T) Null, während CreateInstance tatsächlich ein neues Objekt vom Typ T zurückgibt (oder fehlschlägt, wenn kein geeigneter Konstruktor vorhanden ist), so dass das Ergebnis niemals identisch ist.

    
Tomas Vana 28.08.2011 17:55
quelle
3

Sie geben immer ein anderes Ergebnis zurück, wenn T ein Referenztyp ist. default(T) gibt null zurück, während Activator.CreateInstance<T>() eine neue Instanz von T zurückgibt, die mit dem öffentlichen parameterlosen Konstruktor von T erstellt wurde.

    
cdhowie 28.08.2011 17:55
quelle
2

default(T) gibt null für Referenztypen zurück. Activator.CreateInstance<T>() wird nicht. A string ist ein Referenztyp in .NET.

    
Daniel A. White 28.08.2011 17:55
quelle
2

Nicht sicher, was Sie fragen, aber sie sind anders:

default(T) gibt null zurück, wenn T kein Werttyp ist ... Der Aufruf CreateInstance erstellt eine Instanz und ruft den Standardkonstruktor auf, falls es einen gibt (andernfalls wird eine Ausnahme ausgelöst) ...

    
Yahia 28.08.2011 17:57
quelle

Tags und Links