2012-09-25 32 views
6

मेरे पास एक फ़ंक्शन है जिसमें दो निश्चित तर्क हैं। लेकिन अगले तर्क तय नहीं किए गए हैं, उनमें से दो या तीन या चार हो सकते हैं।वैकल्पिक तर्क कैसे पारित करें

यह रनटाइम तर्क है तो मैं उस फ़ंक्शन को कैसे परिभाषित कर सकता हूं?

मेरे कोड लगता है:

public ObservableCollection<ERCErrors> ErrorCollectionWithValue 
    (string ErrorDode, int MulCopyNo, dynamic arguments comming it should be 2 or 3) 
     { 

     return null; 
    } 
+0

mayby ​​आप के लिए यह कुछ है ?: http://csharp.net-tutorials.com/classes/method-overloading/ – Mathlight

उत्तर

12

1) params (C# Reference)

public ObservableCollection<ERCErrors>ErrorCollectionWithValue 
       (string ErrorDode, int MulCopyNo, params object[] args) 
{ 
    //... 
} 

2) Named and Optional Arguments (C# Programming Guide)

public ObservableCollection<ERCErrors> ErrorCollectionWithValue 
    (string ErrorDode, int MulCopyNo, object arg1 = null, int arg2 = int.MinValue) 
{ 
    //... 
} 

3) और शायद सरल विधि overloading अभी भी बेहतर सूट होता है, अलग अलग तरीकों के लिए विधि तर्क को अलग? इस लिंक के तहत आप भी नामित किया गया और वैकल्पिक पैरामीटर

का एक और विवरण प्राप्त कर सकते हैं
5

एक दृष्टिकोण तरीकों

public ObservableCollection<ERCErrors> ErrorCollectionWithValue 
    (string ErrorDode, int MulCopyNo, int param1) 
{ 
    //do some thing with param1 
} 

public ObservableCollection<ERCErrors> ErrorCollectionWithValue 
    (string ErrorDode, int MulCopyNo, int param1,int param2) 
{ 
    //do some thing with param1 and param3 
} 

public ObservableCollection<ERCErrors> ErrorCollectionWithValue 
    (string ErrorDode, int MulCopyNo, int param1, int param2, int param3) 
    { 
       //do some thing with param1, param2 and param3 
    } 

अतिभारित है तो इन सभी वैध होगा करने के लिए है

var err = ErrorCollectionWithValue("text", 10, 1); 
var err = ErrorCollectionWithValue("text", 10, 1,2); 
var err = ErrorCollectionWithValue("text", 10, 1,2,3); 

एक और दृष्टिकोण वैकल्पिक पैरामीटर का उपयोग करने के लिए है । इसके साथ आपको पहले दृष्टिकोण में 3 के विपरीत केवल एक विधि की आवश्यकता है।

public ObservableCollection<ERCErrors> ErrorCollectionWithValue 
    (string ErrorDode, int MulCopyNo, int param1 = 0, int param2 = 0, optional int param3 = 0) 
{ 

} 

इन अभी भी मान्य

var err = ErrorCollectionWithValue("text", 10, 1); //defaults param2 and param3 to 0 
var err = ErrorCollectionWithValue("text", 10, 1,2); //defaults param3 to 0 
var err = ErrorCollectionWithValue("text", 10, 1,2,3); 

वैकल्पिक पैरामीटर के किसी भी छोड़ने के लिए कर रहे हैं, आप का उपयोग करने की आवश्यकता है named parameters और this जो केवल सी # 4.0 और उसके बाद

var err = ErrorCollectionWithValue("text", param3: 5); //skipping param1 and param2 

में समर्थित है में अन्य दो दृष्टिकोण, आप पैरामीटर के क्रम को छोड़ नहीं सकते हैं।

2

आप params साथ जा सकते हैं अगर तर्क की संख्या भिन्न हो सकते हैं:

public ObservableCollection<ERCErrors> ErrorCollectionWithValue(string errorCode, int num, params object[] args) 
{ 
    foreach(object obj in args) 
{ 
    //process args. 
} 
} 
+0

धन्यवाद यह वही है जो मैं चाहता हूं। –