2012-11-07 8 views
14

मेरे पास एक विधि है जो पैराम लेती है। विधि के अंदर एक और चर उत्पादन के लिए जोड़ा जाएगा:सी #: अतिरिक्त पैरामीटर के साथ पैराम में उपयोग करने के लिए सरणी कनवर्ट करें

private void ParamsTest(params object[] objs) 
{ 
    var foo = "hello"; 
    // Invalid: Interpretes objs as single array parameter: 
    Console.WriteLine("{0}, {1}, {2}", foo, objs); 
} 

जब मैं

ParamsTest("Hi", "Ho"); 

फोन मैं उत्पादन देखना चाहेंगे।

hello Hi Ho 

मुझे क्या करने की ज़रूरत है?

मैं एक नई सरणी में foo और objs कॉपी और WriteLine है कि सरणी पारित लेकिन वहाँ के रूप में फिर से पैरामीटर व्यवहार करने के लिए objs मजबूर करने के लिए एक और अधिक सुरुचिपूर्ण तरीका है सकते हैं? objs.ToParams() की तरह?

+0

Console.WriteLine उदाहरण या प्रारूप स्ट्रिंग द्वारा sidetracked हो न करें। यह मेरा असली मुद्दा नहीं है। वास्तविक प्रश्न: मैं 3 (प्रारूप, foo और सरणी) के बजाय लिखने के लिए 4 (प्रारूप, foo और 2 सरणी तत्व) तर्क कैसे लिख सकता हूं। – AHalvar

उत्तर

10

अगर आपकी समस्या आपके सरणी के लिए एक और तत्व जोड़ने के लिए बस है, तो आप एक सूची

List<object> list = new List<object> { "hello" }; 
list.AddRange(objs); 
Console.WriteLine("{0}, {1}, {2}, ...", list.ToArray()); 

params एक डेटाप्रकार नहीं है इस्तेमाल कर सकते हैं। पैरामीटर डेटाटाइप अभी भी एक सादा सरणी है।

+1

यह मेरा वर्तमान समाधान है। तो इसे और अधिक सुंदर तरीके से करने का कोई तरीका नहीं, यानी एक सूची आवंटित किए बिना और ऑब्जेक्ट्स की प्रतिलिपि बनाये? – AHalvar

+0

समस्या यह है कि आप .NET में किसी सरणी का आकार बदल नहीं सकते हैं। तो या तो एक और संग्रह डेटाटाइप का उपयोग करें या चारों ओर मूल्यों की प्रतिलिपि बनाएँ। – Jan

1

आप इस

string objsString = string.Empty; 
foreach (var ob in objs) 
    objsString += ", " + ob.ToString(); 
Console.WriteLine("{0}{1}", foo, objsString); 

तरह foreach पाश का उपयोग या और भी बेहतर तरीका है सकते हैं: params सरणी

var foo = "hello"; 
Console.Write(foo); 
objs.ForEach(obj => Console.Write(", {0}", obj.ToString())); 
Console.WriteLine(); 

के माध्यम से

string paramsString = string.Join(", ", objs); 
Console.WriteLine("{0}, {1}", foo, paramsString); 
0

लूप या String.Join() का प्रयोग कर एक बनाने के लिए सरणी का स्ट्रिंग प्रतिनिधित्व।

var foo = "hello"; 
string output = String.Join(", ", objs); 
Console.WriteLine("{0}, {1}", foo, output); 
6

मैं स्वरूपण करने के लिए string.Join का प्रयोग करेंगे:

Console.WriteLine("{0}, {1}", foo, string.Join(", ", objs)); 
+0

[सहायक ** लिंक **] (http://msdn.microsoft.com/en-us/library/57a79xd0.aspx)। –

+1

यह Console.WriteLine उदाहरण के लिए समस्या हल करता है, लेकिन स्वाभाविक रूप से :) WriteLine मेरी असली समस्या नहीं है, बस एक (बहुत सरल?) चित्रण। – AHalvar

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