Преобразование массива C # в строку с помощью отражения / преобразования типов - PullRequest
0 голосов
/ 29 июля 2009

Я пытаюсь выяснить, как преобразовать произвольный массив или коллекцию в строку с помощью отражения, и это сводит меня с ума ... ОРЕХИ ... Я почти готов приблизить мою красную линию поворота к монитору компьютера здесь.

Так, например, учитывая массив объектов 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 ]

3 голосов
/ 29 июля 2009

Нет такого понятия, как "стандартное строковое представление массива". Но вы всегда можете:

string stringRepresentation = 
    string.Join(",",
        Array.Convert<Foo, string>(delegate(Foo f) { return f.ToString(); }));
0 голосов
/ 29 июля 2009

Просто вызов ToString () для отдельных участников должен работать ...

object[] data = GetData();
string convertedData = String.Join(",",(from item in data select item.ToString()).ToArray());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...