一般に、配列を受け入れるメソッドには、以下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);