使用反射/类型转换将C#数组转换为字符串

时间:2009-07-29 14:53:37

标签: c# reflection

我正在试图弄清楚如何通过反射将任意数组或集合转换为字符串,它让我疯狂......但是......我正好靠近我的红色秋千线穿过电脑显示器。

因此,例如,给定一个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”或者在例如属性编辑器中使用默认字符串表示。

谢谢!

2 个答案:

答案 0 :(得分:3)

没有“数组的标准字符串表示”这样的东西。但你可以随时:

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

答案 1 :(得分:0)

只需在各个成员上调用ToString()就可以了......

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