.NET

2010-08-29 37 views
7

में सशर्त ऑपरेटर के साथ अजीब व्यवहार यह मुझे सुंदर स्टंप है। शायद मैं अभी बहुत थक गया हूँ।.NET

Rectangle rectangle = new Rectangle(0, 0, image.Width, image.Height); 
    Rectangle cropArea = inputArea == null ? rectangle : inputArea.Value; 

    if (inputArea == null) 
     cropArea = rectangle; 

इनपुट एरिया एक निरर्थक आयताकार है, जो मेरे विशेष मामले में शून्य है।

पहले दो कथन एक फसल पैदा करते हैं एरिया 0 से शुरू हुआ। दूसरा, हालांकि, छवि की चौड़ाई और ऊंचाई के आधार पर सही फसल एरिया उत्पन्न करता है। क्या मैंने सशर्त ऑपरेटर के साथ कुछ गलत समझा है? ऐसा लगता है कि इनपुट एरिया = शून्य जब आयत वापस नहीं करता है? मूल्य प्रकारों के साथ काम करते समय कोई quirks है?

संपादित करें: ठीक है, मुझे पहले यह कोशिश करनी चाहिए: वीएस पुनरारंभ करना चाहिए। ऐसा लगता है कि डीबगर मुझसे झूठ बोला, या कुछ। वैसे भी, अब काम करता है। धन्यवाद।

+0

मैंने इसे किसी और के संकेत के रूप में छोड़ने के बारे में सोचा जो वीएस को पुनरारंभ करना हमेशा अप्रत्याशित समस्याओं को हल कर सकता है। तुम क्या सोचते हो? – Max

+0

किसने इस सवाल को कम किया ??? यह विजुअल स्टूडियो में एक भयानक बग उजागर करने वाला एक बिल्कुल वैध प्रश्न है। –

+0

एक तरफ के रूप में, ध्यान दें कि आप यहां सशर्त ऑपरेटर के बजाय नल कोलेसिंग ऑपरेटर का उपयोग कर सकते हैं: croparea = inputArea ?? आयत; –

उत्तर

1

कि दृश्य स्टूडियो डिबग मोड में एक बुरा बग की तरह लगता है जो आप बेवकूफ बनाना है:

alt text

अब F10 इस लाइन पर कदम और आपको मिलता है:

alt text

कंसोल पर सही मान मुद्रित होते हैं।

डब्ल्यूटीएफ।

+0

क्या आप Nullable

+0

@JeremySpouken, किस चर के लिए प्रयास किया था? –

+1

@ जेरेमीस्पोकन: यह 'आयत के बराबर है? '। – Timwi

0
Rectangle cropArea = (!inputArea.HasValue) ? rectangle : inputArea.Value; 
+1

यह बराबर है। – Timwi

+0

अब * मेरे * थ्रेड फेलो पर स्पैम क्यों है :) @Hitech आयताकार? इनपुट एरिया = शून्य; शून्य इनपुट एरिया 2 = शून्य; @TimWi - अब क्यों डाउनवोट .. ओपी को बाहर करने में मदद करने की कोशिश कर रहा था? – StuartLC

+0

+1 क्योंकि मैंने आपकी पोस्ट पर गलती की और एक छोटी लौ युद्ध शुरू किया। यह पता चलता है कि यह सिल्वरलाइट रेक्टेंज क्लास है जो शून्य नहीं है। –

0

आपका कोड सही दिखाई देता है। सशर्त अभिव्यक्ति (या सशर्त ऑपरेटर, या मूल रूप से टर्नरी ऑपरेटर कहा जाता है ... अब सभी खुश हैं? :)) अगर/अन्य कथन के साथ अंतर-परिवर्तनीय होना चाहिए।

Rectangle cropArea = inputArea == null ? rectangle : inputArea.Value; 

ठीक वही होना चाहिए के रूप में:

Rectangle cropArea; 
if (inputArea == null) 
{ 
    cropArea = rectangle; 
} 
else 
{ 
    cropArea = inputArea.Value; 
} 

(वास्तव में वे एक ही आईएल कोड उत्पन्न चाहिए)।

डीबगर के माध्यम से ट्रेस करें और देखें कि क्या कुछ भी आपके ऊपर कूदता है या नहीं।

+0

कृपया सशर्त ऑपरेटर "टर्नरी ऑपरेटर" को कॉल न करें। मैंने इसे सही करने के लिए आपका जवाब संपादित कर लिया है, मुझे उम्मीद है कि आपको कोई फर्क नहीं पड़ता। – Timwi

+0

@Timwi: आपको अभी भी jQuery साइट पर शिकायत करने की आवश्यकता है। वे इसे टर्नरी ऑपरेटर (अलग-अलग भाषा, एक ही ऑपरेटर) कहते हैं :) http://learn.jquery.com/javascript-101/conditional-code/ –

0

तो तुम कह रहे हैं कि जब inputAreanull है, if बयान के बिना आप एक आयताकार छवि आकार की तुलना में कुछ और करने के लिए प्रारंभ हो सकते हैं? मैंने बस इसे चलाने की कोशिश की और यह ठीक काम करता है। सुनिश्चित करें कि image का आकार है और inputArea वास्तव में null है।

+0

हां, जिनमें से सभी बहुत अजीब लग रहे थे, जब तक मुझे दृश्य स्टूडियो का एहसास नहीं हुआ मुझसे झूठ बोला। मेरा संपादन देखें। – Max

+0

@ मैक्स: शायद यह एक अच्छी बात थी जिसे मैंने वीएस का उपयोग नहीं किया था। –

-1

क्या है?

Rectangle rectangle = ...; 
Rectangle cropArea; 
if (inputArea == null) 
    cropArea = rectangle; 
else 
    cropArea = inputArea.Value; 

if (inputArea == null) 
    cropArea = rectangle; 

दूसरा क्यों है? यह पूरी तरह से और पूरी तरह से अनावश्यक है। परिदृश्य जिसमें फसल एरिया अभी भी शून्य या शून्य हो सकती है अगर इनपुट एरिया। वैल्यू शून्य/शून्य है, क्योंकि आपने इसकी जांच नहीं की है (केवल अगर इनपुट एरिया शून्य है)।