2012-09-18 17 views
26

मैं 1 से अधिक कार्रवाई के साथ कथन अगर एक पंक्ति करना चाहता हूं।एकल पंक्ति यदि 2 क्रियाओं के साथ कथन

डिफ़ॉल्ट यह है:

(if) ? then : else 

userType = (user.Type == 0) ? "Admin" : "User"; 

लेकिन मैं एक "और" केवल, मैं की जरूरत की जरूरत नहीं है एक

कि बहु लाइन में की तरह "और अगर":

if (user.Type == 0) 
    userType = "Admin" 
else if (user.Type == 1) 
    userType = "User" 
else if (user.Type == 2) 
    userType = "Employee" 

क्या इसके लिए एक लाइन में कोई संभावना है?

+0

मुझे लगता है कि यह एक ऐसा मामला हो सकता है जहां 'एनयूएम' बेहतर है, यदि आपके कुछ एपीआई पूर्णांक का उपयोग करते हैं, और अन्य तारों का उपयोग करते हैं, तो अगर आप प्रत्येक युग्मन के अर्थों को अपडेट करना भूल जाते हैं तो अपडेट विसंगतियां हो सकती हैं। – Matthew

उत्तर

63

ऐसा लगता है कि तुम सच में एक Dictionary<int, string> या संभवतः एक switch बयान चाहते हैं ...

आप सशर्त ऑपरेटर हालांकि साथ यह कर सकते हैं:

userType = user.Type == 0 ? "Admin" 
     : user.Type == 1 ? "User" 
     : user.Type == 2 ? "Employee" 
     : "The default you didn't specify"; 

जब आप डाल सकता है कि में एक पंक्ति, मैं दृढ़ता से आपसे आग्रह करता हूं कि आप नहीं।

मैं आमतौर पर केवल अलग-अलग स्थितियों के लिए ऐसा करता हूं - न केवल मानचित्र में बेहतर तरीके से संभाले जाने वाले कई अलग-अलग संभावित मूल्यों के लिए।

+0

जॉन, यह थोड़ा सा है मेरा मानना ​​है ... इसे और जटिल क्यों करें? (वैसे, मुझे आपको एक ही सवाल से गुजरने में खुशी हुई :) –

+0

@ एच 2CO3: आप कौन सा संस्करण कह रहे हैं और अधिक जटिल है? हम एक स्ट्रिंग के लिए एक पूर्णांक मैप करना चाहते हैं - एक शब्दकोश मुझे सबसे प्राकृतिक दृष्टिकोण की तरह लगता है। –

+0

मेरा मतलब है शब्दकोश। मुझे लगता है कि यह आपको "अच्छा अभ्यास" है जो आपको यहां पकड़ा गया है। बेशक, आप एक शब्दकोश का उपयोग कर सकते हैं - लेकिन हे, आप एक सरणी का उपयोग कर सकते हैं जो सूचकांक उपयोगकर्ता के प्रकार (जो वास्तव में लगातार पूर्णांक होना चाहिए, शायद एक enum) होना चाहिए, और 3 खराब सरल पूर्णांक के लिए, टर्नरी ऑपरेटर नहीं है वह गलत है! व्यक्तिगत रूप से मुझे यह बिल्कुल अपठनीय नहीं लगता है। स्विच स्टेटमेंट स्पष्ट रूप से बेहतर है (मेरे दृष्टिकोण से), यदि आप '?:' अपठनीय मानते हैं, तो मैं 'स्विच' का उपयोग करने का सुझाव देना चाहता हूं। –

6

आप लिख सकते हैं कि एक पंक्ति में, लेकिन ऐसा कुछ नहीं है जिसे कोई पढ़ सके। इसे पहले रखें जैसे आपने इसे पहले ही लिखा है, यह पहले से ही सुंदर है।

आप बहुत ज्यादा if/else निर्माणों है, तो आप Collection अलग datastructures का उपयोग करते हुए, Dictionaries की तरह (कुंजी को देखने के लिए) या के बारे में सोच सकते हैं (इस पर सशर्त LINQ प्रश्नों को चलाने के लिए)

16
userType = (user.Type == 0) ? "Admin" : (user.type == 1) ? "User" : "Admin"; 

करना चाहिए छल।

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