配列の入ったobject
型をstring.Join()
で結合するにはIEnumerable
にキャストしてからOfType<T>()
を使います。キャストせず渡すと可変長引数の最初の引数として素直にToString()
されます。ちなみにIEnumerable
へキャストすると文字列(char[]
配列)も分割されるので適宜x.GetType().IsArray
で分岐します。
// global using有効時 using System.Collections; object o = new int[5]; Console.WriteLine(string.Join(", ", o)); Console.WriteLine(string.Join(", ", (o as IEnumerable)!.OfType<object>())); // 出力 // System.Int32[] // 0, 0, 0, 0, 0
OfType<T>()
の類似メソッドにCast<T>()
がありますが、object
型を使う場合はOfType<T>()
で十分だと思います。
using System.Collections; object o = new int[5]; Console.WriteLine(string.Join(", ", (o as IEnumerable)!.Cast<object>())); // 0, 0, 0, 0, 0