2016-11-04 24 views
7

W języku C# 6.0 można napisać tak:Dlaczego nazwa (obiekt) nie jest dozwolona?

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

Mają ten sam wynik:

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

Ale nie można napisać to:

var name = nameof(object); 

Generuje następujące błąd:

Invalid expression term 'object'.

Ale nadal można napisać to:

var name = nameof(System.Object); 

Dlaczego nameof(object) nie kompiluje?

+2

Spróbuj: 'nameof (Object)' zamiast. 'nameof()' nie działa na synonimach, tylko na oryginalnych nazwach klas. –

+0

@CodeCaster, aby uzyskać klasę "Nazwa obiektu" jako ciąg –

+1

@CodeCaster Jeroen ma rację. Wypróbuj, jeśli w to nie wierzysz. – hvd

Odpowiedz

14

Różnica polega na tym, że object jest synonimem klasy Object, a nameof() nie działa na synonimy.

samo dotyczy nameof(int) vs nameof(Int32)

+3

Odpowiednia dokumentacja: https://msdn.microsoft.com/en-au/library/dn986596.aspx "Warto wymienić następujące błędy produkcyjne: * wstępnie zdefiniowane typy (na przykład int lub void) *" – Rob

+0

@Rob well to jest referencja, a nie specyfikacja. Technicznie, 'System.Object' jest predefiniowanym prostym typem, a' object' jego aliasem, więc żaden nie powinien działać zgodnie z tym opisem ... – CodeCaster