2012-08-07 13 views
20

क्या सी # में एकाधिक params पैरामीटर होना संभव है? कुछ ऐसा:क्या कई "पैरा" पैरामीटर संभव हैं?

void foobar(params int[] foo, params string[] bar) 

लेकिन मुझे यकीन नहीं है कि यह संभव है या नहीं। यदि ऐसा है, तो संकलक कैसे निर्णय लेगा कि तर्क कहां विभाजित करें?

+1

[गैरी] में आपका स्वागत है, 5 उत्तरों लगभग कई सेकंड में सूचीबद्ध हैं। आप कक्षाओं के परम में क्यों नहीं जाते? या '>' –

+0

कक्षाओं के एक परम में गुजरने का क्या मतलब है? – garytchao

+1

मुझे इस सुविधा की कमी से मारा गया है :( – nawfal

उत्तर

31

आपके पास केवल एक पैराम तर्क हो सकता है। आपके पास दो सरणी तर्क हो सकते हैं और कॉलर आपकी विधि को कॉल करने के लिए सरणी प्रारंभकर्ताओं का उपयोग कर सकता है, लेकिन केवल एक पैराम तर्क हो सकता है।

void foobar(int[] foo, string[] bar) 

... 

foobar(new {1, 2,3}, new {"a", "b", "c"}); 
+0

धन्यवाद, बिल्कुल जवाब जो मैं देख रहा था :) – garytchao

+0

आपके 10 वें वोट (आपको बैज देने) के लिए उपरोक्त करना क्योंकि ओपी ने आपका जवाब स्वीकार नहीं किया था। :) – Scott

+0

@ स्कॉट धन्यवाद :-) –

27

नहीं यह संभव नहीं है। यह लो:

Mult(1, 2, 3); 

यह इनमें से किसी भी रूप में पढ़ा जा सकता है:

Mult(new int[] {   }, new long[] { 1, 2, 3 }); 
Mult(new int[] { 1  }, new long[] { 2, 3 }); 
Mult(new int[] { 1, 2 }, new long[] {  3 }); 
Mult(new int[] { 1, 2, 3 }, new long[] {   }); 

आप की तरह पैरामीटर के रूप में दो सरणियों ले जा सकते हैं

void Mult(params int[] arg1, params long[] arg2) 

कैसे संकलक इस व्याख्या करने के लिए माना जाता है हालांकि:

void Mult(int[] arg1, params long[] arg2) 
+4

@ न्यूफल सही है, लेकिन मैं गलत नहीं हूं, इसलिए मैं डाउनवोट द्वारा उलझन में हूं। –

+0

क्योंकि आप इस सुविधा की कमी के कारण के रूप में कहते हैं। – nawfal

+0

यदि पैराम्स समूह अलग-अलग हैं तो एक दूसरे, कंपाइलर व्याख्या कर सकते हैं .. उदाहरण के लिए विधि (पैराम int [] संख्याएं, पैराम स्ट्रिंग [] ग्रंथों) पैरामीटर {} कहें। विधि (34,76, "हाय", "कैसे हैं!"); –

3

नहीं, ओ nly एक एकल परम की अनुमति है और यहां तक ​​कि यह अंतिम तर्क होना चाहिए। पढ़ें this

यह

public void Correct(int i, params string[] parg) 
{} 

काम करेंगे लेकिन इस काम नहीं करेगा

public void Correct(params string[] parg, int i) 
{} 
0
void useMultipleParams(int[] foo, string[] bar) 
{ 
} 


useMultipleParams(new int[]{1,2}, new string[] {"1","2"}) 
+2

आपने पैराम कुंजी शब्द का उपयोग नहीं किया जैसा कि सवाल में पूछा गया था। – PVitt

10

से MSDN - params

कोई अतिरिक्त पैरामीटर एक विधि घोषणा में पैरामीटर कीवर्ड के बाद अनुमति दी जाती है, और केवल एक पैरामीटर यह विधि घोषणाओं में केवल एक पैरामीटर कीवर्ड हो सकता है विधि घोषणा में कीवर्ड को की अनुमति है।

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