2009-07-29 7 views
0

任意の配列またはコレクションをリフレクションによって文字列に変換する方法を理解しようとしています.NUTS ...私は近くのyayです私の赤いスイングラインをコンピューターのモニターに置いてください。リフレクト/タイプ変換を使用してC#配列を文字列に変換する

たとえば、Colorオブジェクトの配列を指定すると、ArrayConverterまたはColorConverterを使用して、または適切なコンバーターが何であれ、その配列のデフォルトの文字列表現(セミコロンで区切られたものなど)が必要です。私は単純なオブジェクト型でこれを行うことができますが、コレクションは私を逃してしまいます。

ここで私は反射を使って(任意の)オブジェクトのプロパティを反復しています。適切なコンバータを使用して、任意の型を含む配列を標準的な文字列表現に総称的に変換するにはどうすればよいですか?

Type t = widget.GetType(); 

System.Reflection.PropertyInfo[] props = t.GetProperties(); 
foreach (PropertyInfo prop in props) 
{ 
    TypeConverter converter = TypeDescriptor.GetConverter(prop.PropertyType); 
    if (converter != null) 
    { 
     object o = prop.GetValue(widget, null); 
     att.Value = converter.ConvertToString(o); 
     // This returns some BS like "System.Array [2]" 
     // I need the actual data. 
    } 
} 

編集:私はしようとすると、この:

att.Value = o.ToString(); 

それを返す: "System.Drawing.Color []"。一方私は "255,202,101; 127,127,127"またはデフォルトの文字列表現が例えばプロパティエディタで使用されているものを必要とします。

ありがとうございます!

+0

をtoString()を呼び出します再配布可能なCLR。 –

答えて

3

"配列の標準文字列表現"のようなものはありません。しかし、あなたはいつでもできます。

string stringRepresentation = 
    string.Join(",", 
     Array.Convert<Foo, string>(delegate(Foo f) { return f.ToString(); })); 
+2

私は、オブジェクトのプロパティを文字列にシリアル化するためにリフレクションを使用したいと思います。手動でマッピング関数を記述する必要はありません。 95%の時間で、f.ToString()はクラスの名前を返します。これはあまり役に立ちません。 – Juliet

0

はちょうどあなたがVSのデバッグビジュアライザを求めているならば、私はそれらをしているとは思わない...動作するはず一緒に個々のメンバーに

object[] data = GetData(); 
string convertedData = String.Join(",",(from item in data select item.ToString()).ToArray()); 
関連する問題