System.Collections.array zamiast zamiast wartości z listy

0

Witam

Mam pytanie, pewnie dla niektórych bardzo proste.
Mam w kodzie prostą linijkę:
Console.WriteLine(lista);
gdzie "lista" to kolekcja zawierająca kilka stringów(wyrazów).
Zamiast tych stringów wyświetla mi się w konsoli:
System.Collections.ArrayList
Czy ktoś może wie dlaczego?

Pozdrawiam

3

foreach(object element in lista) Console.WriteLine(element);

Kilka słów wyjaśnień:
Tutaj masz opis klasy Console, a w niej metody WriteLine: https://msdn.microsoft.com/pl-pl/library/system.console.writeline%28v=vs.110%29.aspx
W momencie wywołania wyszukiwana jest najbardziej pasująca metoda do typu argumentu, w tej sytuacji podajesz ArrayList, więc pasuje WriteLine(object), ponieważ wszystko dziedziczy z object. Metoda WriteLine wykona ToString() dla obiektu klasy ArrayList i wydrukuje wynik na konsoli, ToString() dla ArrayList po prostu zwraca nazwę typu czyli System.Collections.ArrayList.

To co oczekujesz to wyświetlenie każdego obiektu z tej listy, więc musisz przejść pętlą przez listę i każdy element z osobna przekazać do metody WriteLine w klasie Console. Jakby coś było niejasne to pisz.

Pozdrawiam.

0

Ok, tak działa
Dziękuję za pomoc.

1

Możesz też zrobić własną arraylistę dziedziczącą po System.Collections.ArrayList.
Po prostu nadpisałbyś metodę ToString kodem podobnym do tego co Ci dał @michu_cc

4

ArrayList to zaszłość z .NET 1.0 kiedy nie było jeszcze generyków, od .NET => 2.0 (btw. aktualnie jest już wersja 4.6.1 :)) używaj List.

Ale zamiast foreach można zrobić string.Join:

ArrayList arrayList = new ArrayList();
arrayList.Add("Jeden");
arrayList.Add("Dwa");
arrayList.Add("Trzy");

/* dla .NET 1.0 tak informacyjnie :)
* var str = string.Join(Environment.NewLine, (string[]) arrayList.ToArray(Type.GetType("System.String")));
*/

// dla .NET >= 2.0
var str = string.Join(Environment.NewLine, arrayList.ToArray());
Console.WriteLine(str);
0

Ok, dzięki
Póki co klikam sobie podstawy, z czasem ogarne o czym piszecie ;)
ten string.Join też sobie sprawdze

1 użytkowników online, w tym zalogowanych: 0, gości: 1