一般来说,对于接受params
数组的方法,我还提供了一个接受的重载IEnumerable<T>
:
public void MyMethod(params string[] args)
{
MyMethod((IEnumerable<string>)args);
}
public void MyMethod(IEnumerable<string> args)
{
// ...
}
然后,您还可以轻松地提供一个可枚举作为参数。例如:
string[] var1 = new string[5];
string[][] var2 = new string[8][5];
// Jon Skeet's suggestion without ToArray():
var sequence = new[] { var1 }.Concat(var2);
MyMethod(sequence);
如果您真的想使用您建议的语法,您可以这样做,因为在您的示例中您使用object[]
. 对象数组也是一个对象,因此您可以在方法中进行展平:
public void MyMethod(params object[] args)
{
object[] flattened = arg
// For each element that is not in an array, put it in an array.
.Select(a => a is object[] ? (object[])a : new object[] { a })
// Select each element from each array.
.SelectMany(a => a)
// Make the resulting sequence into an array.
.ToArray();
// ...
}
MyMethod(var1, var2);