C# Language
naam van de operator
Zoeken…
Invoering
Met de operator nameof
kunt u de naam van een variabele , type of lid in tekenreeks krijgen zonder deze als een letterlijke code hard te coderen.
De bewerking wordt geëvalueerd tijdens het compileren, wat betekent dat u de ID waarnaar wordt verwezen, kunt hernoemen met behulp van de functie voor het hernoemen van een IDE. De naamstring wordt hiermee bijgewerkt.
Syntaxis
- nameof (expressie)
Basisgebruik: een variabelenaam afdrukken
Met de operator nameof
kunt u de naam van een variabele, type of lid in tekenreeks krijgen zonder deze als een letterlijke code hard te coderen. De bewerking wordt geëvalueerd tijdens het compileren, wat betekent dat u een nieuwe naam kunt geven met behulp van de IDE-functie voor hernoemen, een ID waarnaar wordt verwezen en de naamstring wordt hiermee bijgewerkt.
var myString = "String Contents";
Console.WriteLine(nameof(myString));
Zou uitvoeren
MyString
omdat de naam van de variabele "myString" is. Als de variabelenaam opnieuw wordt gewijzigd, wordt de tekenreeks gewijzigd.
Indien een verwijzingstype wordt nameof
, retourneert de operator nameof
de naam van de huidige referentie, niet de naam of de typenaam van het onderliggende object. Bijvoorbeeld:
string greeting = "Hello!";
Object mailMessageBody = greeting;
Console.WriteLine(nameof(greeting)); // Returns "greeting"
Console.WriteLine(nameof(mailMessageBody)); // Returns "mailMessageBody", NOT "greeting"!
Een parameternaam afdrukken
snipper
public void DoSomething(int paramValue)
{
Console.WriteLine(nameof(paramValue));
}
...
int myValue = 10;
DoSomething(myValue);
Console-uitgang
paramValue
PropertyChanged-evenement verhogen
snipper
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";
Console-uitgang
Adres
Behandeling van PropertyChanged-evenementen
snipper
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;
Console-uitgang
Titel gewijzigd in Alles staat in brand en is gebroken
Status gewijzigd in ShowStopper
Toegepast op een generieke parameter type
snipper
public class SomeClass<TItem>
{
public void PrintTypeName()
{
Console.WriteLine(nameof(TItem));
}
}
...
var myClass = new SomeClass<int>();
myClass.PrintTypeName();
Console.WriteLine(nameof(SomeClass<int>));
Console-uitgang
TItem
SomeClass
Toegepast op gekwalificeerde identificatiegegevens
snipper
Console.WriteLine(nameof(CompanyNamespace.MyNamespace));
Console.WriteLine(nameof(MyClass));
Console.WriteLine(nameof(MyClass.MyNestedClass));
Console.WriteLine(nameof(MyNamespace.MyClass.MyNestedClass.MyStaticProperty));
Console-uitgang
MyNamespace
Mijn klas
MyNestedClass
MyStaticProperty
Controle van argumenten en bewakingsbepalingen
Verkiezen
public class Order
{
public OrderLine AddOrderLine(OrderLine orderLine)
{
if (orderLine == null) throw new ArgumentNullException(nameof(orderLine));
...
}
}
Over
public class Order
{
public OrderLine AddOrderLine(OrderLine orderLine)
{
if (orderLine == null) throw new ArgumentNullException("orderLine");
...
}
}
Het gebruik van de functie nameof
maakt het eenvoudiger om de parameterparameters te wijzigen.
Sterk getypte MVC-actielinks
In plaats van het gebruikelijke losjes getypte:
@Html.ActionLink("Log in", "UserController", "LogIn")
U kunt nu actiekoppelingen maken die sterk getypt zijn:
@Html.ActionLink("Log in", @typeof(UserController), @nameof(UserController.LogIn))
Nu, als u wilt uw code refactoren en de naam van de UserController.LogIn
methode om UserController.SignIn
, hoeft u zich geen zorgen te maken over het zoeken naar alle reeks gebeurtenissen. De compiler zal het werk doen.