मैं नहीं समझ सकता क्यों यहमैं टर्नरी ऑपरेटर के साथ दशमलव को शून्य क्यों नहीं दे सकता?
decimal? compRetAmount = !string.IsNullOrEmpty(txtLineCompRetAmt.Text)
? decimal.Parse(txtLineCompRetAmt.Text.Replace(",",""))
: null;
मैं नहीं समझ सकता क्यों यहमैं टर्नरी ऑपरेटर के साथ दशमलव को शून्य क्यों नहीं दे सकता?
decimal? compRetAmount = !string.IsNullOrEmpty(txtLineCompRetAmt.Text)
? decimal.Parse(txtLineCompRetAmt.Text.Replace(",",""))
: null;
करने के लिए इसे डाल सकता है और आप एक टाइप किया वस्तु निर्दिष्ट करने के लिए की जरूरत है।
यह काम करना चाहिए:
decimal? compRetAmount = !string.IsNullOrEmpty(txtLineCompRetAmt.Text)
? decimal.Parse(txtLineCompRetAmt.Text.Replace(",",""))
: (decimal?)null;
या इस एक सा बेहतर है:
decimal? compRetAmount = !string.IsNullOrEmpty(txtLineCompRetAmt.Text)
? decimal.Parse(txtLineCompRetAmt.Text.Replace(",",""))
: default(decimal?);
यहाँ default कीवर्ड के लिए MSDN कड़ी है।
धन्यवाद बहुत slugster। –
fanbloodytastic! – northpole
सबसे अच्छी प्रतिक्रिया वह है जो सिर्फ जवाब नहीं देती बल्कि सूचित करती है और शिक्षित करती है .. अच्छा एक स्लगस्टर –
काम नहीं करेगा आप decimal?
decimal? compRetAmount = !string.IsNullOrEmpty(txtLineCompRetAmt.Text)
? (decimal?)decimal.Parse(txtLineCompRetAmt.Text.Replace(",",""))
: null;
है जो कोई फर्क नहीं पड़ता। एक 'दशमलव' को 'दशमलव' में रखा जा सकता है। –
"टर्नरी ऑपरेटर का आउटपुट प्रकार पहले भाग का प्रकार है": यह सच नहीं है ... यह पहले या दूसरे भाग का प्रकार हो सकता है, इस पर निर्भर करता है कि उनके बीच कौन से रूपांतरण मौजूद हैं –
आप एक असाइन कर सकते हैं स्पष्ट कास्टिंग के बिना 'दशमलव' को 'दशमलव' तक। – slugster
decimal? compRetAmount = !string.IsNullOrEmpty(txtLineCompRetAmt.Text) ?
decimal.Parse(txtLineCompRetAmt.Text.Replace(",","")) :
(decimal?)null;
के पहले भाग को कास्ट करने की जरूरत है इस प्रयास करें:
decimal? compRetAmount = !string.IsNullOrEmpty(txtLineCompRetAmt.Text) ?
decimal.Parse(txtLineCompRetAmt.Text.Replace(",", "")) :
(decimal?) null;
समस्या यह है कि संकलक नहीं जानता कि null
किस प्रकार है। तो आप बस क्योंकि null
प्रकार object
(प्रभावी रूप से untyped) की है decimal?
क्योंकि संकलक सशर्त ऑपरेटर के संचालन से सबसे अच्छा प्रकार का अनुमान नहीं लगा सकता है।
जब आप condition ? a : b
लिखते हैं, वहाँ b
के प्रकार के a
के प्रकार से एक अंतर्निहित रूपांतरण या a
के प्रकार के b
के प्रकार के द्वारा की जानी चाहिए। संकलक तब संपूर्ण अभिव्यक्ति के प्रकार को इस रूपांतरण के लक्षित प्रकार के रूप में अनुमानित करेगा। तथ्य यह है कि आप इसे decimal?
के चर के लिए असाइन करते हैं, जिसे कभी संकलक द्वारा नहीं माना जाता है। आपके मामले में, a
और b
के प्रकार decimal
और कुछ अज्ञात संदर्भ या शून्य प्रकार हैं। संकलक अनुमान लगा सकते हैं नहीं तुम क्या मतलब है, ताकि आप इसे मदद की जरूरत है:
decimal? compRetAmount = !string.IsNullOrEmpty(txtLineCompRetAmt.Text)
? decimal.Parse(txtLineCompRetAmt.Text.Replace(",",""))
: default(decimal?);
decimal.Parse
प्रयोग न करें।
Convert.ToDecimal
यदि यह शून्य स्ट्रिंग दिया जाता है तो 0 वापस आ जाएगा। decimal.Parse
एक ArgumentNullException फेंक देगा यदि आप जिस स्ट्रिंग को पार्स करना चाहते हैं वह शून्य है।
हम दिमागी पाठक नहीं हैं, क्या काम नहीं करता है? –
इसे सशर्त ऑपरेटर कहा जाता है, न कि टर्नरी ऑपरेटर –
@ जकूबकोनेकी हालांकि यह स्पष्ट है। जितना संभव हो उतना जानकारी प्रदान करना हमेशा अच्छा होता है। इस मामले में एक संकलन त्रुटि –