2009-07-29 76 views
0

我想弄清楚如何通过反射将任意数组或集合转换为字符串,并且它将驱使我坚果.NUTS ...我关于yay接近把我的红色挥杆线穿过电脑显示器。例如,给定一个Color对象数组,我希望使用ArrayConverter或ColorConverter或任何适当的转换器的数组的默认字符串表示形式(您知道,用分号分隔或任何其他形式)。我可以为简单的对象类型做这件事,但收藏无法回避。使用反射/类型转换将C#数组转换为字符串

以下是我如何使用反射迭代(任意)对象的属性。如何使用适当的转换器将包含任意类型的数组一般转换为标准字符串表示形式?

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

如果你问的VS调试可视化工具,我不认为这些是在可重新分配的CLR。 – 2009-07-29 15:58:00

回答

3

没有“数组的标准字符串表示”这样的事情。但你总是可以:

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

我想他想使用反射来将对象的属性序列化为字符串,而无需手动编写映射函数。 95%的时间,f.ToString()将返回类的名称,这是不是很有用。 – Juliet 2009-07-29 15:34:23

0

只是调用toString()而个别成员一起应该工作...

object[] data = GetData(); 
string convertedData = String.Join(",",(from item in data select item.ToString()).ToArray());