paramsपैरामीटर संशोधक कॉल करने के लिए एक विधि के लिए कई तर्क पारित करने के लिए एक शॉर्टकट वाक्य रचना देता है। एक paramsपैरामीटर के साथ एक विधि को कॉल करने के दो तरीके हैं :
1) पैरामीटर प्रकार की एक सरणी के साथ कॉल करना, जिस स्थिति में paramsकीवर्ड का कोई प्रभाव नहीं पड़ता है और सरणी सीधे विधि से पारित हो जाती है:
object[] array = new[] { "1", "2" };
// Foo receives the 'array' argument directly.
Foo( array );
2) या, तर्कों की एक विस्तारित सूची के साथ कॉल करना, जिस स्थिति में कंपाइलर स्वचालित रूप से एक अस्थायी सरणी में तर्कों की सूची को लपेट देगा और उस विधि को पास करेगा:
// Foo receives a temporary array containing the list of arguments.
Foo( "1", "2" );
// This is equivalent to:
object[] temp = new[] { "1", "2" );
Foo( temp );
ऑब्जेक्ट सरणी में पास करने के लिए " params object[]" पैरामीटर के साथ एक विधि में , आप या तो कर सकते हैं:
1) मैन्युअल रूप से एक रैपर सरणी बनाएं और उस विधि को सीधे पास करें, जैसा कि लेससेव ने उल्लेख किया है :
Foo( new object[] { array } ); // Equivalent to calling convention 1.
2) या, आदमobject द्वारा उल्लिखित तर्क को , जिस स्थिति में कंपाइलर आपके लिए आवरण सरणी बनाएगा:
Foo( (object)array ); // Equivalent to calling convention 2.
हालाँकि, यदि विधि का लक्ष्य कई ऑब्जेक्ट सरणियों को संसाधित करना है, तो इसे स्पष्ट " params object[][]" पैरामीटर के साथ घोषित करना आसान हो सकता है । यह आपको कई सरणियों को तर्क के रूप में पारित करने की अनुमति देगा:
void Foo( params object[][] arrays ) {
foreach( object[] array in arrays ) {
// process array
}
}
...
Foo( new[] { "1", "2" }, new[] { "3", "4" } );
// Equivalent to:
object[][] arrays = new[] {
new[] { "1", "2" },
new[] { "3", "4" }
};
Foo( arrays );
संपादित करें: रेमंड चेन इस व्यवहार का वर्णन करता है और यह एक नई पोस्ट में C # विनिर्देश से संबंधित है ।