2013-04-19 11 views
5

Więc zaczynam kurs programowania w septemeber, i będziemy programować w C#. Więc zacząłem się uczyć, więc mam w tym pewne doświadczenie. Teraz mam ~ 2 lata doświadczenia w HTML, CSS i PHP, więc od razu wybrałem C#.C# System.Collections.Generic.List`1 [System.String]

Uczę się lekcji i uczę się przez działanie, a nie czytanie. Postanowiłem zrobić małą małą konsolową grę RPG do nauki. Mam podstawową grę, ale mam problem. Próbuję wyświetlić inwentarz gracza z klasy Gracza w innej klasie.

Używam listy do przechowywania ekwipunku graczy.

public List<string> inventory = new List<string>(); 

Jest to plik klasy Gracze.

Potem robię w Klasie sklepowej;

Player player = new Player(); 

Aby utworzyć nowy obiekt dostępu do klasy gracza. Następnie, aby dodać coś do Listy w sklepie, robię;

player.inventory.Add("Axe"); 

Ale jeśli robię wydruk player.inventory(); w konsoli pojawia się błąd - System.Collections.Generic.List`1 [system.string].

Czy jest ktoś, kto mógłby mi pomóc? Czy muszę podać więcej kodu?

Odpowiedz

0

Potrzebujesz pętli foreach do iteracji każdego członka listy. Nie możesz po prostu wydrukować listy jako całości.

Trzeba coś takiego:

foreach(var i in Player.Inventory) 
{ 
    Console.WriteLine(i); 
} 
2

starasz się wydrukować obiekt listy, a nie wartości zawarte w liście, trzeba coś takiego: -

foreach(var i in player.Inventory) 
{ 
    Console.WriteLine(i); 
} 

Edit * jako za komentarze

Console.Write(string.Join(System.Environment.NewLine, player.Inventory)); 
+0

Użyłem przykład, który wysłałeś. Działa to teraz i użyję tego, dopóki nie wymyślę, jak umieścić to w jednoliniowym kawałku kodu. – Jon

+0

@Jon, dlaczego musi to być jedna liniowa? W wielu przypadkach wybrałbym kod, który byłby bardziej czytelny i łatwiejszy w utrzymaniu. Zmienię jednak moją odpowiedź na jedno rozwiązanie liniowe, aby można było zobaczyć, jak to się robi :) – DGibbs

+0

Po opublikowaniu jednej linijki pętla foreach jest łatwiejsza do zrozumienia. – Jon

1

wydrukuj następny ciąg do konsoli, jeśli chcesz wydrukować wszystkie przedmioty na raz:

string items = string.Join(Environment.NewLine, player.inventory); 

Console.WriteLine(items); 

to wydrukuje każdą pozycję w osobnej linii

Domyślnie ToString() (który nazywa się na liście kiedy przechodzą go Console.WriteLine) wydrukuje typ z listy, a nie sam zawartość. Dlatego otrzymujesz System.Collections.Generic.List`1 [System.String]. na ekranie konsoli.

4

To nie jest błąd, tylko drukowanie listy. Domyślna implementacja List w postaci ToString() wypisuje nazwę typu.

Zgaduję, że chcesz działać tak, jak w PHP, gdzie drukujesz tablice oddzielone przecinkami?Spróbuj:

string.Join(", ", player.inventory); 
0

Jeśli chcesz wprowadzić wszystkie elementy zapasów, kod płynących powinno działać:

foreach (string inventoryItem in player.inventory) 
{ 
    Console.WriteLine(inventoryItem); 
} 

player.inventory jest obiektem kolekcji i nie mogą być bezpośrednio wejściowego.

Powiązane problemy