potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

C#11 配列の入ったobject型をstring.Joinで結合する

配列の入った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