2016-11-04 5 views
7

В C# 6.0 вы можете написать это:Почему имяof (объект) не разрешено?

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

Они имеют один и тот же результат:

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

Но вы не можете написать это:

var name = nameof(object); 

Он генерирует следующие ошибка:

Invalid expression term 'object'.

Но вы все еще можете написать это:

var name = nameof(System.Object); 

Почему nameof(object) не компилируется?

+2

Try: 'nameof (Object)' вместо этого. 'nameof()' не работает над синонимами, только на исходных классах. –

+0

@CodeCaster, чтобы получить имя класса 'Object' как строку –

+1

@CodeCaster Jeroen является правильным. Попробуйте, если вы не верите. – hvd

ответ

14

Разница в том, что object является синонимом класса Object и nameof() не работает над синонимами.

То же самое относится и к nameof(int) против nameof(Int32)

+3

Соответствующая документация: https://msdn.microsoft.com/en-au/library/dn986596.aspx «Следует упомянуть следующие ошибки: * предопределенные типы (например, int или void) *« – Rob

+0

@Rob well это ссылка, а не спецификация. Технически «System.Object» - это предопределенный простой тип, а «объект» - его псевдоним, поэтому ни один из них не должен работать в соответствии с этим описанием ... – CodeCaster

Смежные вопросы