खोज…


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

  • एक्स .Y? // null अगर X शून्य है तो XY
  • ? एक्स .Y .Z? // null यदि X null है या Y शून्य है तो XYZ
  • एक्स [सूचकांक]; // शून्य यदि X शून्य है तो X [अनुक्रमणिका]
  • एक्स .ValueMethod (); // null यदि X, X.ValueMethod () का परिणाम है;
  • एक्स .VoidMethod (); // कुछ भी नहीं अगर X शून्य है तो X.VoidMethod () को कॉल करें;

टिप्पणियों

ध्यान दें कि मान प्रकार T पर अशक्त coalescing ऑपरेटर का उपयोग करते समय आपको एक Nullable<T> वापस मिलेगा।

नल-सशर्त संचालक

?. संचालक क्रियात्मक शर्करा है जो वर्बोज़ नल जांच से बचने के लिए है। इसे सेफ नेविगेशन ऑपरेटर के रूप में भी जाना जाता है।


निम्न उदाहरण में प्रयुक्त वर्ग:

public class Person
{
    public int Age { get; set; }
    public string Name { get; set; }
    public Person Spouse { get; set; }
}

यदि ऑब्जेक्ट संभावित रूप से अशक्त है (जैसे कि एक फ़ंक्शन जो एक संदर्भ प्रकार लौटाता है) तो ऑब्जेक्ट को पहले संभव NullReferenceException को रोकने के लिए नल के लिए जाँच की जानी चाहिए। नल-सशर्त ऑपरेटर के बिना, यह ऐसा दिखेगा:

Person person = GetPerson();

int? age = null;
if (person != null)
    age = person.Age;

शून्य-सशर्त ऑपरेटर का उपयोग कर एक ही उदाहरण:

Person person = GetPerson();

var age = person?.Age;    // 'age' will be of type 'int?', even if 'person' is not null

संचालक का पीछा करते हुए

नल-सशर्त ऑपरेटर को किसी वस्तु के सदस्यों और उप-सदस्यों पर जोड़ा जा सकता है।

// Will be null if either `person` or `person.Spouse` are null
int? spouseAge = person?.Spouse?.Age;

Null-Coalescing Operator के साथ संयोजन

शून्य-सशर्त ऑपरेटर को डिफ़ॉल्ट मान प्रदान करने के लिए null-coalescing ऑपरेटर के साथ जोड़ा जा सकता है:

// spouseDisplayName will be "N/A" if person, Spouse, or Name is null
var spouseDisplayName = person?.Spouse?.Name ?? "N/A";

अशक्त-सशर्त सूचकांक

इसी तरह ?. ऑपरेटर, नल-सशर्त सूचकांक ऑपरेटर शून्य मानों के लिए जाँच करता है जब एक संग्रह में अनुक्रमित होता है जो शून्य हो सकता है।

string item = collection?[index];

के लिए वाक्य रचना चीनी है

string item = null;
if(collection != null)
{
    item = collection[index];
}

NullReferenceException से बचना

var person = new Person
{
    Address = null;
};

var city = person.Address.City; //throws a NullReferenceException
var nullableCity = person.Address?.City; //returns the value of null

इस प्रभाव को एक साथ जंजीर किया जा सकता है:

var person = new Person
{
    Address = new Address
    {
        State = new State
        {
            Country = null
        }
    }
};

// this will always return a value of at least "null" to be stored instead
// of throwing a NullReferenceException
var countryName = person?.Address?.State?.Country?.Name; 

नल-सशर्त संचालक का विस्तार विधि के साथ किया जा सकता है

एक्सटेंशन विधि शून्य संदर्भों पर काम कर सकती है, लेकिन आप उपयोग कर सकते हैं ?. वैसे भी जांच करने के लिए।

public class Person 
{
    public string Name {get; set;}
}

public static class PersonExtensions
{
    public static int GetNameLength(this Person person)
    {
        return person == null ? -1 : person.Name.Length;
    }
}

आमतौर पर, इस विधि को null संदर्भों के लिए चालू किया जाएगा, और वापसी -1:

Person person = null;
int nameLength = person.GetNameLength(); // returns -1

का उपयोग कर ?. विधि null संदर्भों के लिए चालू नहीं की जाएगी, और प्रकार int? :

Person person = null;
int? nameLength = person?.GetNameLength(); // nameLength is null.

यह व्यवहार वास्तव में किस तरह से अपेक्षित है ?. ऑपरेटर काम करता है: यह NullReferenceExceptions से बचने के लिए, null इंस्टेंस के लिए इंस्टेंस मेथड कॉल करने से NullReferenceExceptions । हालाँकि, एक ही तर्क एक्सटेंशन विधि पर लागू होता है, इस पद्धति के अंतर के बावजूद कि कैसे विधि घोषित की जाती है।

एक्सटेंशन विधि को पहले उदाहरण में क्यों कहा जाता है, इस बारे में अधिक जानकारी के लिए, कृपया विस्तार विधियों - नल जाँच प्रलेखन देखें।



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