C# Language
nazwa operatora
Szukaj…
Wprowadzenie
Operator nameof
pozwala uzyskać nazwę zmiennej , typu lub elementu w postaci łańcucha, bez kodowania go jako literału.
Operacja jest oceniana w czasie kompilacji, co oznacza, że możesz zmienić nazwę identyfikatora, do którego się odwołujesz, używając funkcji zmiany nazwy IDE, a ciąg nazwy zostanie zaktualizowany wraz z nim.
Składnia
- nameof (wyrażenie)
Podstawowe użycie: Drukowanie nazwy zmiennej
Operator nameof
pozwala uzyskać nazwę zmiennej, typu lub elementu w postaci łańcucha, bez kodowania go jako literału. Operacja jest oceniana w czasie kompilacji, co oznacza, że możesz zmienić nazwę, używając funkcji zmiany nazwy IDE, identyfikatora, do którego istnieje odniesienie, i ciąg nazwy zostanie zaktualizowany wraz z nim.
var myString = "String Contents";
Console.WriteLine(nameof(myString));
Wyjdzie
myString
ponieważ nazwa zmiennej to „myString”. Refaktoryzacja nazwy zmiennej zmieni łańcuch.
W przypadku wywołania typu nameof
operator nameof
zwraca nazwę bieżącego odwołania, a nie nazwę lub nazwę typu obiektu bazowego. Na przykład:
string greeting = "Hello!";
Object mailMessageBody = greeting;
Console.WriteLine(nameof(greeting)); // Returns "greeting"
Console.WriteLine(nameof(mailMessageBody)); // Returns "mailMessageBody", NOT "greeting"!
Drukowanie nazwy parametru
Skrawek
public void DoSomething(int paramValue)
{
Console.WriteLine(nameof(paramValue));
}
...
int myValue = 10;
DoSomething(myValue);
Wyjście konsoli
paramValue
Podnoszenie zdarzenia PropertyChanged
Skrawek
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";
Wyjście konsoli
Adres
Obsługa zdarzeń Zmienione zdarzenia
Skrawek
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;
Wyjście konsoli
Tytuł zmieniono na Everything is fire and broken
Status zmieniono na ShowStopper
Stosowany do parametru typu ogólnego
Skrawek
public class SomeClass<TItem>
{
public void PrintTypeName()
{
Console.WriteLine(nameof(TItem));
}
}
...
var myClass = new SomeClass<int>();
myClass.PrintTypeName();
Console.WriteLine(nameof(SomeClass<int>));
Wyjście konsoli
Temat
SomeClass
Stosowany do kwalifikowanych identyfikatorów
Skrawek
Console.WriteLine(nameof(CompanyNamespace.MyNamespace));
Console.WriteLine(nameof(MyClass));
Console.WriteLine(nameof(MyClass.MyNestedClass));
Console.WriteLine(nameof(MyNamespace.MyClass.MyNestedClass.MyStaticProperty));
Wyjście konsoli
MyNamespace
Moja klasa
MyNestedClass
MyStaticProperty
Sprawdzanie argumentów i klauzule ochronne
Woleć
public class Order
{
public OrderLine AddOrderLine(OrderLine orderLine)
{
if (orderLine == null) throw new ArgumentNullException(nameof(orderLine));
...
}
}
Nad
public class Order
{
public OrderLine AddOrderLine(OrderLine orderLine)
{
if (orderLine == null) throw new ArgumentNullException("orderLine");
...
}
}
Korzystanie z funkcji nameof
ułatwia refaktoryzację parametrów metody.
Silnie wpisane linki akcji MVC
Zamiast zwykłego luźno wpisanego:
@Html.ActionLink("Log in", "UserController", "LogIn")
Możesz teraz mocno wpisywać linki akcji:
@Html.ActionLink("Log in", @typeof(UserController), @nameof(UserController.LogIn))
Teraz, jeśli chcesz zmienić kod i zmienić nazwę metody UserController.LogIn
na UserController.SignIn
, nie musisz się martwić o wyszukiwanie wszystkich ciągów znaków. Kompilator wykona zadanie.