6

ショートバージョン -

未知の配列(UInt16[]、string[] など)のインスタンスを含むオブジェクト型の変数を取り、それを配列として扱う簡単な方法はありますか。たとえば、call String.Join(",", obj)カンマ区切りの文字列を生成するには?

些細なこと?私もそう思いました。

次の点を考慮してください。

object obj = properties.Current.Value;

obj にはさまざまなインスタンスが含まれる場合があります。たとえば、UInt16[]、string[] などの配列です。

obj をそのままの型として扱いたい、つまり、不明な型へのキャストを実行します。それを達成した後、通常どおり続行できます。つまり、次のとおりです。

Type objType = obj.GetType();
string output = String.Join(",", (objType)obj);

もちろん、上記のコードは機能しません (objType が不明です)。

これもありません:

object[] objArr = (object[])obj;   (Unable to cast exception)

明確にするために、オブジェクトを配列に変換しようとしているわけではありません(すでに配列のインスタンスです)。オブジェクトを1つとして扱うことができます。

ありがとうございました。

4

1 に答える 1

9

string.Join.NET 4(より多くのオーバーロードが発生した)以降を使用していると仮定すると、2つの簡単なオプションがあります。

  • 動的型付けを使用して、コンパイラーにジェネリック型の引数を計算させます。

    dynamic obj = properties.Current.Value;
    string output = string.Join(",", obj);
    
  • にキャストしてからIEnumerable、を使用して:Cast<object>を取得します。IEnumerable<object>

    IEnumerable obj = (IEnumerable) properties.Current.Value;
    string output = string.Join(",", obj.Cast<object>());
    
于 2012-12-13T08:34:16.353 に答える