खोज…


परिचय

nameof ऑपरेटर आप एक शाब्दिक रूप में यह कड़ी मेहनत से कोडिंग के बिना स्ट्रिंग के रूप में एक चर, प्रकार या सदस्य का नाम पाने के लिए अनुमति देता है।

ऑपरेशन का संकलन-समय पर मूल्यांकन किया जाता है, जिसका अर्थ है कि आप एक आईडीई के नाम बदलने की सुविधा का उपयोग करके एक संदर्भित पहचानकर्ता का नाम बदल सकते हैं, और नाम स्ट्रिंग इसके साथ अपडेट होगा।

वाक्य - विन्यास

  • nameof (अभिव्यक्ति)

मूल उपयोग: एक चर नाम मुद्रण

nameof ऑपरेटर आपको एक चर का नाम, स्ट्रिंग या सदस्य को हार्ड-कोडिंग के बिना एक शाब्दिक के रूप में प्राप्त करने की अनुमति देता है। ऑपरेशन का संकलन-समय पर मूल्यांकन किया जाता है, जिसका अर्थ है कि आप आईडीई के नाम बदलने की सुविधा, एक संदर्भित पहचानकर्ता और नाम स्ट्रिंग का उपयोग करके इसका नाम बदल सकते हैं।

var myString = "String Contents";
Console.WriteLine(nameof(myString));

उत्पादन होगा

myString

क्योंकि चर का नाम "myString" है। परिवर्तनशील नाम को दर्शाने से स्ट्रिंग बदल जाएगी।

यदि किसी संदर्भ प्रकार पर कॉल किया जाता है, तो 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

संपत्ति जुटाने की घटना

टुकड़ा

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";

कंसोल आउटपुट

पता

संपत्ति की घटनाओं को संभालना

टुकड़ा

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;

कंसोल आउटपुट

शीर्षक बदलकर सब कुछ आग और टूट पर है

शो शोस्‍टर में स्थिति बदल गई

एक सामान्य प्रकार के पैरामीटर पर लागू होता है

टुकड़ा

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))

अब अगर आप अपने कोड refactor और नाम बदलना चाहते हैं UserController.LogIn को विधि UserController.SignIn , आप सभी स्ट्रिंग घटनाओं के लिए खोज के बारे में चिंता की जरूरत नहीं है। कंपाइलर काम करेगा।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow