2016-11-04 3 views
7

In C# 6.0 können Sie schreiben:Warum ist nameof (object) nicht erlaubt?

var instance = default(object); 
var type = typeof(object); 

Sie haben das gleiche Ergebnis:

var instance = default(System.Object); 
var type = typeof(System.Object); 

Aber Sie nicht schreiben können:

var name = nameof(object); 

Es generiert die folgende Fehler:

Invalid expression term 'object'.

Aber man kann dies noch schreiben:

var name = nameof(System.Object); 

Warum nameof(object) lässt sich nicht kompilieren?

+2

Versuchen: 'nameof (Object)' statt. 'nameof()' funktioniert nicht bei Synonymen, nur bei den ursprünglichen Klassennamen. –

+0

@CodeCaster, um den Namen der Klasse 'Object' als String zu erhalten –

+1

@CodeCaster Jeroen hat Recht. Probieren Sie es aus, wenn Sie es nicht glauben. – hvd

Antwort

14

Der Unterschied ist, dass object ist ein Synonym für die Klasse Object und nameof() funktioniert nicht auf Synonyme.

Gleiches gilt für nameof(int) vs nameof(Int32)

+3

Relevante Dokumentation: https://msdn.microsoft.com/en-au/library/dn986596.aspx "Die folgenden sind erwähnenswert, die Fehler erzeugen: * vordefinierte Typen (zum Beispiel int oder void) *" – Rob

+0

@Rob gut das ist die Referenz, nicht die Spezifikation. Technisch ist 'System.Object' ein vordefinierter einfacher Typ und' Objekt' sein Alias, also sollte keiner nach dieser Beschreibung funktionieren ... – CodeCaster

Verwandte Themen