C# Language                
            имя оператора
        
        
            
    Поиск…
Вступление
 Оператор nameof позволяет вам получить имя переменной , типа или члена в строковой форме без жесткого кодирования в качестве литерала. 
Операция оценивается во время компиляции, что означает, что вы можете переименовать ссылочный идентификатор, используя функцию переименования среды IDE, и строка имени будет обновляться вместе с ней.
Синтаксис
- nameof (выражение)
Основное использование: печать имени переменной
 Оператор nameof позволяет вам получить имя переменной, типа или члена в строковой форме без жесткого кодирования в качестве литерала. Операция оценивается во время компиляции, что означает, что вы можете переименовать, используя функцию переименования среды IDE, ссылочный идентификатор, а строка имени будет обновляться вместе с ним. 
var myString = "String Contents";
Console.WriteLine(nameof(myString));
Выпустит
MyString
потому что имя переменной «myString». Рефакторинг имени переменной изменит строку.
 Если nameof в ссылочном типе, оператор nameof возвращает имя текущей ссылки, а не имя или имя типа базового объекта. Например: 
string greeting = "Hello!";
Object mailMessageBody = greeting;
Console.WriteLine(nameof(greeting)); // Returns "greeting"
Console.WriteLine(nameof(mailMessageBody)); // Returns "mailMessageBody", NOT "greeting"!
Печать имени параметра
отрывок
public void DoSomething(int paramValue)
{
    Console.WriteLine(nameof(paramValue));
}
...
int myValue = 10;
DoSomething(myValue);
Консольный выход
paramValue
Принятие события PropertyChanged
отрывок
public class Person : INotifyPropertyChanged
{
    private string _address;
    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
    public string Address
    {
        get { return _address; }
        set
        {
            if (_address == value)
            {
                return;
            }
            _address = value;
            OnPropertyChanged(nameof(Address));
        }
    }
}
...
var person = new Person();
person.PropertyChanged += (s,e) => Console.WriteLine(e.PropertyName);
person.Address = "123 Fake Street";
Консольный выход
Адрес
Обработка событий PropertyChanged
отрывок
public class BugReport : INotifyPropertyChanged
{
    public string Title { ... }
    public BugStatus Status { ... }
}
...
private void BugReport_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    var bugReport = (BugReport)sender;
    switch (e.PropertyName)
    {
        case nameof(bugReport.Title):
            Console.WriteLine("{0} changed to {1}", e.PropertyName, bugReport.Title);
            break;
        case nameof(bugReport.Status):
            Console.WriteLine("{0} changed to {1}", e.PropertyName, bugReport.Status);
            break;
    }
}
...
var report = new BugReport();
report.PropertyChanged += BugReport_PropertyChanged;
report.Title = "Everything is on fire and broken";
report.Status = BugStatus.ShowStopper;
Консольный выход
Название изменено на «Все в огне»
Статус изменен на ShowStopper
Применяется к параметру общего типа
отрывок
public class SomeClass<TItem>
{
    public void PrintTypeName()
    {
        Console.WriteLine(nameof(TItem));
    }
}
...
var myClass = new SomeClass<int>();
myClass.PrintTypeName();
Console.WriteLine(nameof(SomeClass<int>));
Консольный выход
TItem
SomeClass
Применяется к квалифицированным идентификаторам
отрывок
Console.WriteLine(nameof(CompanyNamespace.MyNamespace));
Console.WriteLine(nameof(MyClass));
Console.WriteLine(nameof(MyClass.MyNestedClass));
Console.WriteLine(nameof(MyNamespace.MyClass.MyNestedClass.MyStaticProperty));
Консольный выход
MyNamespace
Мои занятия
MyNestedClass
MyStaticProperty
Аргументы проверки и защиты
предпочитать
public class Order
{
    public OrderLine AddOrderLine(OrderLine orderLine)
    {
        if (orderLine == null) throw new ArgumentNullException(nameof(orderLine));
        ...
    }
}
Над
public class Order
{
    public OrderLine AddOrderLine(OrderLine orderLine)
    {
        if (orderLine == null) throw new ArgumentNullException("orderLine");
        ...
    }
}    
 Использование функции nameof упрощает рефакторинг параметров метода. 
Сильно набраны ссылки действий MVC
Вместо обычного навязчивого типа:
@Html.ActionLink("Log in", "UserController", "LogIn")
Теперь вы можете четко набирать ссылки на действия:
@Html.ActionLink("Log in", @typeof(UserController), @nameof(UserController.LogIn))
 Теперь, если вы хотите реорганизовать свой код и переименовать метод UserController.LogIn в UserController.SignIn , вам не нужно беспокоиться о поиске всех строк. Компилятор выполнит эту работу.