Здравствуйте. На C#e из сервера получаю данные и хочу вводит на экран в textboxе так textbox.Text = allData.ToString(); результат такой - System.Collections.ArrayList . Подскажите как исправить, чтобы нормальный текст выходила?
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();
}
Вывод элементов ArrayList через запятую с помощью String.Join:
textbox.Text = String.Join(", ", allData.ToArray);
Метод подходит, если у вас ArryList состоит из простых объектов.
-
Тут у него allData в виде ArrayList. В вашем случае только 1 уровень, но если как коллекцию то это простейший вариант. 24 мая 2012 в 6:09
-
ArrayList тоже работает. Используется перегрузка String.Join(String, Object[]) 24 мая 2012 в 6:20
-
Мне больше так нравится:
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
. Но думаю из сервисов объемы вряд ли будут большими.
-
-
Сорри, не очень силен в теории, как это extension расширение реализовывается? Отдельный объект типа
EnumConverters
? 24 мая 2012 в 6:18 -
Сделать метод static и перед параметром написать this. И ещё: метод лучше называть не
Converter
, аConvert
– Modus24 мая 2012 в 8:58 -