2012-11-07 7 views
14

Mam metodę, która pobiera parametry. Wewnątrz metody innej zmiennej dodaje się do wyjścia:C#: Konwertuj tablicę do użycia w parametrach z dodatkowymi parametrami

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

Kiedy zadzwonić

ParamsTest("Hi", "Ho"); 

Chciałbym zobaczyć wyjście.

hello Hi Ho 

Co muszę zrobić?

mogę skopiować foo i objs do nowej tablicy i przekazać tę tablicę do WriteLine ale tam jest bardziej elegancki sposób zmusić objs zachowywać się jak params ponownie? Rodzaj objs.ToParams()?

+0

Nie sidetracked przez przykład Console.WriteLine lub ciąg formatu. To nie jest mój prawdziwy problem. Prawdziwe pytanie: Jak mogę zrobić WriteLine zobacz 4 (format, foo i 2 elementy tablicy) args zamiast 3 (format, foo i tablica). – AHalvar

Odpowiedz

10

Jeśli problem jest tylko, aby dodać kolejny element do tablicy, można użyć listę

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

params nie jest typ danych. Typ danych parametrów jest po prostu wciąż tablicą.

+1

To jest moje obecne rozwiązanie. Więc nie można tego zrobić bardziej elegancko, tj. Bez przydzielania listy i kopiowania obiektów? – AHalvar

+0

Problem polega na tym, że nie można zmienić rozmiaru tablicy w .NET. Więc albo użyj innego typu danych kolekcji lub skopiuj wartości dookoła. – Jan

1

Można użyć foreach pętli jak ten

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

Albo jest nawet lepszy sposób:

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

pętli za pośrednictwem tablicy

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

params Albo użyć String.Join() stworzyć łańcuchowa reprezentacja tablicy.

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

użyłbym string.Join zrobić formatowanie:

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

[pomocne ** link **] (http://msdn.microsoft.com/en-us/library/57a79xd0.aspx). –

+1

Rozwiązuje to problem dla przykładu Console.WriteLine, ale naturalnie :) WriteLine nie jest moim prawdziwym problemem, tylko (zbyt prosta?) Ilustracja. – AHalvar

Powiązane problemy