2017-10-13 9 views
5

(obj SomeType obj2 है) और मैं बयान इस तरह के आसपास मेरे सिर लपेटो करने की कोशिश कर रहा हूँ।यह वाक्यविन्यास क्या करता है? मैं इन बयानों को देखने के लिए शुरू कर अगर

if (obj is SomeAuto car) 
{ 
    //Do stuff 
} 

यदि मैं सही ढंग से समझता हूं तो हम मूल रूप से वेरिएबल कार में ओबीजे कास्टिंग कर रहे हैं जो एक प्रकार "SomeAuto" होगा?

1) इस बयान के आधिकारिक शब्दावली क्या है?

2) अगर मैं बदलने के लिए अगर बयान सशर्त एक विशेष कारण के लिए निष्पादित करने के लिए चाहते थे तो क्या होगा?

उदाहरण के लिए कहते हैं कि SomeAuto एक आधार वर्ग है और मैं केवल ऑटो के एक खास प्रकार चाहता था, या कहते हैं कि मैं शायद एक विशेष प्रकार को छोड़कर SomeAuto के सभी चाहते हैं।

+0

https://stackoverflow.com/questions/184681/is-vs-typeof –

+3

देखें सी # 7 प्रकार पैटर्न मिलान की तरह दिखता है: https://docs.microsoft.com/en-us/dotnet/csharp/ भाषा-संदर्भ/कीवर्ड/# प्रकार – UnholySheep

+0

अनहोलीशेप ने उत्तर दिया 1), 2 के लिए) आपको शायद एक और पैटर्न की आवश्यकता होगी। – Fildor

उत्तर

6

यह बयान is अभिव्यक्ति C# 7.0 under pattern matching में जोड़ा उपयोग कर रहा है, तो। डॉक्स निर्दिष्ट करते हैं कि:

पैटर्न अभिव्यक्ति फैली परिचित अपने प्रकार से परे एक वस्तु क्वेरी करने के लिए ऑपरेटर है।

यह आपको यह जांचने में सक्षम बनाता है कि obj एक विशिष्ट प्रकार का है और जाली परिणाम को एक चर में निर्दिष्ट करता है।

var car = obj as SomeAuto; 
if(car != null) 
{ 
    //Do Stuff 
} 

जब मूल is से as का उपयोग कर के रूप में बाहर @BurnBA द्वारा एक फर्क बताया कि ध्यान दें कि ऑपरेटर के रूप में केवल संदर्भ करता है:


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

+0

एह, मामूली चेतावनी, 'as' केवल संदर्भ प्रकारों के साथ काम करता है, जबकि आप' int' – BurnsBA

+0

@BurnsBA - अच्छी टिप्पणी जैसी चीज़ों के लिए 'is' का उपयोग कर सकते हैं। यदि आप इसका संदर्भ ला सकते हैं और मैं –

+2

" के अनुसार अपना उत्तर अपडेट करूंगा कि ऑपरेटर केवल संदर्भ रूपांतरण, निरर्थक रूपांतरण और मुक्केबाजी रूपांतरण करता है। ऑपरेटर उपयोगकर्ता द्वारा परिभाषित रूपांतरणों जैसे अन्य रूपांतरण नहीं कर सकता है, जिसे इसके बजाय कास्ट एक्सप्रेशन का उपयोग करके किया जाना चाहिए। "https: // docs। माइक्रोसॉफ्ट।com/en-us/dotnet/csharp/भाषा-संदर्भ/कीवर्ड/ – BurnsBA

संबंधित मुद्दे