2012-11-07 39 views
14

我有一個方法,需要params。在方法的另一個變量應被添加到輸出:C#:轉換數組以使用帶有附加參數的參數

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 

我需要做什麼?

我可以複製fooobjs到一個新的陣列和陣列傳遞給WriteLine但有一個更優雅的方式來強制objs表現爲再次PARAMS?那種objs.ToParams()

+0

不要被Console.WriteLine命令例子或格式字符串牽制。這不是我真正的問題。真正的問題:我如何使WriteLine看到4(格式,foo和2數組元素)參數而不是3(格式,foo和數組)。 – AHalvar

回答

10

如果您的問題僅僅是另一個元素添加到您的數組,你可以使用一個列表

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

params不是數據類型。參數datatype仍然是一個普通數組。

+1

這是我目前的解決方案。所以沒有辦法更優雅地做到這一點,即不分配列表和複製對象? – AHalvar

+0

問題是,您無法調整.NET中的數組大小。因此,要麼使用另一個集合數據類型,要麼複製值。 – Jan

1

您可以使用foreach循環這樣

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

或者有更好的方法:通過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