2010-12-15 9 views
15

यहां एक उदाहरण समारोह है:क्या मैं सी # 4.0 में एक डिफ़ॉल्ट रंग पैरामीटर निर्दिष्ट कर सकता हूं?

public void DrawSquare(int x, int y, Color boxColor = Color.Black) 
{ 
    //Code to draw the square goes here 
} 

संकलक मुझे त्रुटि दे रहा है: Default parameter value for 'boxColor'must be a compile-time constant

मैंने

Color.Black, 
Color.FromKnownColor(KnownColor.Black), and 
Color.FromArgb(0, 0, 0) 

कोशिश की है मैं रंग कैसे बना सकता हूं। ब्लैक डिफ़ॉल्ट रंग हो? इसके अलावा, मैं इसे निर्दिष्ट करने के लिए एक स्ट्रिंग Black का उपयोग नहीं करना चाहता (जो मुझे पता चलेगा)। मुझे Color.Black मान चाहिए।

उत्तर

11

Color.Black एक स्थैतिक, स्थिर नहीं है, इसलिए नहीं, आप यह नहीं कर सकते हैं।

डिफ़ॉल्ट का उपयोग करने के लिए, आप पैरामीटर को शून्य (Color?) बना सकते हैं, और यदि यह शून्य है, तो इसे ब्लैक पर सेट करें।

+0

मेरे पास यह मेरे जवाब में था, लेकिन यदि आप एक शून्य तर्क निर्दिष्ट करने जा रहे हैं, तो क्यों न केवल रंग निर्दिष्ट करें। ब्लैक? :) –

+0

@ जॉर्ज: "रंग। ब्लैक एक स्थिर है, स्थिर नहीं है"। – Vlad

+0

रंग एक संरचना है, इसलिए यदि आप प्रकार के रूप में Nullable का उपयोग करना चाहते थे (या संक्षेप में सी # रंग में), तो यह शून्य हो सकता है। –

11

यह करें:

void foo(... Color boxColor = default(Color)) 
{ 
    if(object.Equals(boxColor, default(Color))) boxColor = Color.Black; 

    // ... 
} 
+0

क्यों नहीं 'अगर (बॉक्सकॉलर == डिफ़ॉल्ट (रंग)) '? – Vlad

+0

इससे कोई फर्क नहीं पड़ता। मैं बराबर नोटेशन पसंद करता हूं, लेकिन मूल्य प्रकारों के साथ, '==' समान है। –

+0

@ एमआर। टीए: ठीक है, इस मामले में 'object.Equals' के बजाय 'Color.Equals' का उपयोग करना बेहतर हो सकता है। या बेहतर 'डिफ़ॉल्ट (रंग) .क्वल्स (बॉक्सकॉलर)' ताकि आप वर्चुअल फ़ंक्शन का उपयोग कर सकें। मेरी राय में, '==' अधिक पठनीय है, लेकिन यह व्यक्तिगत स्वाद का सवाल है। – Vlad

9

क्या यह सरल रखने के साथ गलत क्या है?

public void DrawSquare(int x, int y) 
{ 
    DrawSquare(x,y,Color.Black); 
} 

public void DrawSquare(int x, int y, Color color) 
{ 
    // Do your thing. 
} 
+1

वास्तविक कार्य इतना आसान नहीं है। इसमें लगभग 10 पैरामीटर हैं (जिनमें से अधिकांश वैकल्पिक हैं और वैकल्पिक के रूप में निर्दिष्ट किए जा सकते हैं)। इसके अलावा इन पैरामीटर के साथ 5 या 6 अलग-अलग फ़ंक्शन और प्रत्येक फ़ंक्शन के दो भिन्नताएं हैं। उपर्युक्त करने के लिए बहुत सारे कार्यों को जोड़ना होगा। सुझाव के लिए धन्यवाद, यद्यपि। –

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

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