जवाबों:
यह सिर्फ # 8 में खाली संपत्ति पैटर्न है, जिसका अर्थ है कि मूल्य नहीं null
। यह किसी भी मूल्य प्रकार या संदर्भ प्रकार से मेल खाता है। जैसा कि पानागोटिस कानवोस टिप्पणियों में लिखते हैं, यह अच्छी पुरानी value is object
जांच के बराबर है जो लंबे समय से C # में है।
आम तौर पर यदि आप एक संपत्ति निर्दिष्ट करना चाहते थे, तो यह मेल खाएगा या नहीं। यह गूढ़ उदाहरण दिखाता है कि:
if (value is { Length: 2 })
{
// matches any object that isn't `null` and has a property set to a length of 2
}
संपत्ति पैटर्न सबसे अच्छा काम करते हैं और switch
अभिव्यक्तियों जैसे मामलों में अन्य पैटर्न के साथ तुलना करते समय सबसे स्पष्ट होते हैं ।
s
निश्चित नहीं है। is {}
के लिए आशुलिपि है is object
और तार आपत्ति के लिए डाले जा सकते हैं।
!
, !!
, ?
और ??
पहले और बाद में गुण अलग अलग बातें मतलब है। सिंटैक्टिक शुगर कब खत्म होगी?
value != null
?
हालांकि डैनियल का जवाब सही है, मुझे लगता है कि कुछ संदर्भ जोड़ना उपयोगी हो सकता है कि आप उपयोग में खाली संपत्ति पैटर्न क्यों देख सकते हैं। इस उदाहरण नियंत्रक विधि पर विचार करें जिसे कुछ सत्यापन की आवश्यकता है:
public async Task<IActionResult> Update(string id, ...)
{
if (ValidateId(id) is { } invalid)
return invalid;
...
}
ऊपरोक्त में, ValidateId()
अशक्त या का एक उदाहरण दे सकता है BadObjectRequestResult
। यदि पूर्व वापस कर दिया जाता है, तो सत्यापन सफल होता है और बाकी के शरीर में चला जाता है Update
। यदि उत्तरार्द्ध लौटाया is {}
जाता है , तो सत्य है (अर्थात निश्चित रूप से एक उदाहरण BadObjectRequestResult
है object
), और सत्यापन विफल हो जाता है।
अच्छी तरह से, इसमें से हमने एक चर नाम भी दिया है invalid
, जिसे हम तुरंत वापस कर सकते हैं। इसके बिना हमें थोड़ा अधिक वर्बोस कोड की आवश्यकता होगी।
public async Task<IActionResult> Update(string id, ...)
{
var invalid = ValidateId(id);
if (invalid != null)
return invalid;
...
}
चाहे एक अधिक पठनीय हो या दूसरा पाठक पर निर्भर हो, मैंने सिर्फ एक तरीका प्रस्तुत किया है जिससे खाली संपत्ति पैटर्न का उपयोग किया जा सकता है।
is object invalid
, न किis {} invalid
IActionResult
( वापसी की आवश्यकता है तकनीकी रूप से Task<IActionResult>
)। यदि हम आपकी शैली के साथ चलते हैं, तो if
इसका परिणाम समान है, लेकिन invalid
यह एक object
ऐसा संकलन नहीं होगा।