2009-04-17 10 views
5

私は反射を介してオブジェクトグラフを出力しようとしています。その中にはいくつかの一般的なタイプ(リスト、辞書)があります。私は型(文字列、オブジェクトなど)は含まれていませんが、それらを含むようにしたい(.ToString()を使用して)。一般的なリスト/ディクショナリ

genericリスト/ディクショナリを一般的な方法で出力する方法はありますか?つまり、各キーにオーバーロードされた関数を書き込まないでください。< - > value combintation?

あなたはリフレクションを使用している場合は、ジェネリック医薬品は非常にトリッキー取得

+0

@Brian:それは何か... たくさん容易になるだろう。 –

+0

私はvarキーワードがこれを助けることができるのだろうかと思います。私はそうは思わない。 – Brian

答えて

4

..私はそれは.NET 4.0で可能になると思いますが、それはまだここでは、現在ではありません。単純に非ジェネリックインターフェースを使用できますか? IDictionary/IList? - 確かに、ではない

static void Write(object obj) { 
    if (obj == null) { } 
    else if (obj is IDictionary) { Write((IDictionary)obj); } 
    else if (obj is IList) { Write((IList)obj); } 
    else { Console.WriteLine(obj); } 
} 
static void Write(IList data) { 
    foreach (object obj in data) { 
     Console.WriteLine(obj); 
    } 
} 
static void Write(IDictionary data) { 
    foreach (DictionaryEntry entry in data) { 
     Console.WriteLine(entry.Key + "=" + entry.Value); 
    } 
} 
+0

あまりにも複雑な思考の古典的なケース。一般的なリストはIListに割り当てられるので、リストか辞書かどうかを調べるだけです。ありがとう。 – Sascha

+0

実際にはどちらも自動的に変換できません。 IList :IList、そうではないIDictionary :IDictionary - ほとんどの実装は両方を提供します。 –