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.

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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow