C# Language
nameof ऑपरेटर
खोज…
परिचय
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
, आप सभी स्ट्रिंग घटनाओं के लिए खोज के बारे में चिंता की जरूरत नहीं है। कंपाइलर काम करेगा।