0

Здравствуйте. На C#e из сервера получаю данные и хочу вводит на экран в textboxе так textbox.Text = allData.ToString(); результат такой - System.Collections.ArrayList . Подскажите как исправить, чтобы нормальный текст выходила?

3 ответа 3

3

Метод ToString() для большинства классов не переопределен и возвращает тип объекта. Думаю, следует посмотреть сначала что за тип данных у тетя дает сервер.

Посмотри этот пример, как увидишь как можно примерно пытаться обработать разные типы внутри ArrayList

    ArrayList list = new ArrayList();

    public void add()
    {
        list.Add("smth");
        list.Add(1123);
        list.Add(new char[] { '1', '2', '3' });

        for (Int32 i = 0; i < list.Count; ++i)
        {
            textBox.Text += list[i].ToString() + '\n';
        }

        textBox.Text += '\n';
        char[] myChar = (char[]) list[2];
        for (Int32 i = 0; i < myChar.Length; ++i)
        {
            textBox.Text += myChar[i];
        }
    }

    public MainWindow()
    {
        InitializeComponent();
        add();
    }
3

Вывод элементов ArrayList через запятую с помощью String.Join:

textbox.Text = String.Join(", ", allData.ToArray);

Метод подходит, если у вас ArryList состоит из простых объектов.

3
  • Тут у него allData в виде ArrayList. В вашем случае только 1 уровень, но если как коллекцию то это простейший вариант.
    – semenvx27
    24 мая 2012 в 6:09
  • ArrayList тоже работает. Используется перегрузка String.Join(String, Object[])
    – Tolyandre
    24 мая 2012 в 6:20
  • А вложенные массивы тоже так соединяет через запятую?
    – semenvx27
    24 мая 2012 в 6:29
1

Мне больше так нравится:

string EnumToStringConverter(IEnumerable arg)
{
   string result = "";    
   foreach (var item in arg)
   {
       //Здесь можно проверить тип элемента и если он тоже массив, то вызвать опять
       //эту же функцию. Надо проверить работает ли условие, сейчас не могу это 
       //сделать, так как работаю на компе без VisualStudio. Потом проверю хD

       if (item is IEnumerable) 
             result += EnumToStringConverter(item);
         else
             result += item.ToString();
         result += '\n';
         return result;
   }
}

//

void set()
{
    textbox.Text = EnumToStringConverter(allData);
}

В случае больших объемов в теле моей функции нужно будет воспользоваться StringBuilder. Но думаю из сервисов объемы вряд ли будут большими.

4
  • единственный нюанс - я бы сделал в виде extension метода
    – Spectre
    24 мая 2012 в 6:15
  • Сорри, не очень силен в теории, как это extension расширение реализовывается? Отдельный объект типа EnumConverters?
    – semenvx27
    24 мая 2012 в 6:18
  • Сделать метод static и перед параметром написать this. И ещё: метод лучше называть не Converter, а Convert
    – Modus
    24 мая 2012 в 8:58
  • спасибо, учту в дальнейшем
    – semenvx27
    25 мая 2012 в 5:12

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.