2010-03-02 23 views
7

का उपयोग कर कंपाइलर त्रुटि मुझे लगता है कि मुझे Google पर क्या चाहिए, और शर्त है कि मुझे यहां त्वरित उत्तर मिलेगा।सी # सशर्त ऑपरेटर

String str; 
    bool b = true; 
    b ? str="true" : str="false"; 

    Console.Out.WriteLine(str); 

वह? : वाक्यविन्यास मेरे लिए सही लग रहा है। हालांकि मुझे कंपाइलर त्रुटि मिल रही है।

Program.cs (13,28):
त्रुटि CS1002:; उम्मीद
Program.cs (13,28):
त्रुटि CS1525: अमान्य अभिव्यक्ति शब्द ':'
Program.cs (13,30):
त्रुटि CS1002:; अपेक्षित

csharp वाक्यविन्यास के बारे में निश्चित नहीं है, लेकिन यह सीपीपी में बनाता है। कृपया सहायता कीजिए! धन्यवाद!

अद्यतन: आप में से 10 सही जवाब एलओएल देते हैं, इसलिए मैं इसे प्रस्तुत करने वाले पहले व्यक्ति को ही पुरस्कार दूंगा।

दिलचस्प सिंटेक्स, और मुझे लगता है कि मैं वास्तव में इसे सी ++ वाक्यविन्यास से बेहतर पसंद करता हूं।

वास्तविक कोड के लिए मैं यह कर रहा था:

ftp.ConnectMode = job.FTPUsePassiveMode ? FTPConnectMode.PASV : FTPConnectMode.ACTIVE; 
+0

अन्य ने पहले ही उचित समाधान दिया है; यह संभव है कि प्राथमिकता का क्रम समस्या है। 'बी? (str = "true"): (str = "false"); 'अगर यह काम करता है, तो भी मैं इसका उपयोग नहीं करता। – Matthew

+0

@cchampion: "दिलचस्प सिंटेक्स, और मुझे लगता है कि मैं वास्तव में इसे सी ++ वाक्यविन्यास से बेहतर पसंद करता हूं।" - सी ++ वाक्यविन्यास वही है। यह str = बी होना चाहिए? "सत्य": दोनों भाषाओं में "झूठी"। – Josh

उत्तर

15

आपका कोड पढ़ना चाहिए:

str = b ? "true" : "false"; 

बहरहाल, यह सिर्फ b.ToString().ToLower() बुला लिए समान है। उस ने कहा, मुझे संदेह है कि आपका वास्तविक उपयोग-मामला बस बूलियन मान को स्ट्रिंग में परिवर्तित करने से थोड़ा अधिक जटिल है।

अद्यतन
टिप्पणी में संकेत के रूप में, conditional operator एक मान देता है; यह if/else जैसे नियंत्रण प्रवाह के लिए नहीं है।

+8

प्रासंगिक बिंदु यह है कि टर्नरी ऑपरेटर (? :) एक अभिव्यक्ति है जो एक मान देता है, नियंत्रण प्रवाह तंत्र नहीं (जैसे/else)। –

+0

@ टाइटलर: ठीक है। – Josh

15
str = b ? "true" : "false"; 

लेकिन तुम सिर्फ ऐसा कर सकता है:

str = b.ToString(); 

या यहां तक ​​कि पूरी तरह बिचौलिया काट:

Console.WriteLine(b); 
+0

कड़ाई से बोलते हुए, आपको ToString() (और इस प्रकार लिखित) से "सत्य" और "गलत" मिलेगा, न कि "सत्य" और "झूठा", लेकिन मुझे यकीन नहीं है कि इससे मेरा कोई फर्क नहीं पड़ता। आप हमेशा ToString()। ToLower() कर सकते हैं। – tvanfosson

1
str = (b) ? "true" : "false"; 
+0

लेकिन ... ब्रांड्स में 'बी' क्यों संलग्न करें? मैं उस अस्पष्टता को देखने में असफल रहता हूं जो इसे हल करता है। –

4

त्रिगुट ऑपरेटर बयान स्विचिंग के लिए अनुमति नहीं है, केवल मूल्य स्विचिंग। आप ऐसा करना चाहते हैं:

str= b ? "true" : "false" 

(जाहिर है b.ToString()) इस विशेष समस्या के लिए एक बेहतर समाधान है, लेकिन मैं यह सिर्फ एक उदाहरण है यह सोचते हैं रहा हूँ)।

+0

अभिव्यक्ति चयन ... और str = "true" एक अभिव्यक्ति है। एक = बी कोशिश करें? (str = "true"): (str = "false"); और मुझे लगता है कि आप पाएंगे कि यह ठीक काम करता है। –

+0

और इस बिंदु को संबोधित करने के लिए कि यह वैध C++ कोड है, ऐसा इसलिए है क्योंकि आप C++ में मान प्राप्त करने के लिए कथन का उपयोग कर सकते हैं। तो निम्नलिखित सी ++ में मान्य होगा (हालांकि बहुत भ्रमित): 'ए = बी? सी = डी: सी = एफ' – Josh

+0

@बेन: हां, अभिव्यक्ति चयन एक बेहतर शब्द है, और एक असाइनमेंट एक अभिव्यक्ति है (lvalue में रखा मान लौटा रहा है), लेकिन टर्नरी ऑपरेटर के आउटपुट को अनदेखा नहीं किया जा सकता है। –

0

त्रिगुट ऑपरेटर, सी # में एक बयान के शीर्ष-स्तरीय नहीं किया जा सकता सी # आवश्यकता है क्योंकि कि शीर्ष स्तर के भाव एक पक्ष प्रभाव है।मूल्य प्रकार स्वचालित रूप से एक स्ट्रिंग के लिए उनके मूल्य में परिवर्तित जब .ToString() कहा जाता है ... बूलियन्स सहित

bool b = true; 
string str = b.ToString(); 

नेट में,:

-1
बस जिज्ञासा से बाहर

, क्यों सिर्फ ऐसा नहीं।

+0

जबकि यह एक अच्छा सुझाव है, यह इस सवाल का जवाब नहीं देता है कि इस मामले में टर्नरी ऑपरेटर क्यों काम नहीं कर रहा है। – Josh

+0

बिंदु पूरी तरह से समस्या को खत्म करने के लिए था। अन्य उत्तरों ने पर्याप्त रूप से समझाया कि यह क्यों काम नहीं कर रहा था (क्योंकि वह गलत तरीके से इसका इस्तेमाल कर रहा था।) मैं जवाब दोहराना पसंद नहीं करता, खासकर जब इसका एक गुच्छा होता है। मुझे नहीं लगता कि यह एक कम वोट के लायक है, क्योंकि यह समस्या का एक वैध समाधान था, भले ही उसने स्पष्ट रूप से अपने प्रश्न का उत्तर नहीं दिया। – jrista

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