2013-04-19 10 views
5

Così sto iniziando un corso di sviluppo Web in settembre, e programmeremo in C#. Così ho iniziato a impararlo, quindi ho una certa esperienza in questo. Ora ho 2 anni di esperienza in HTML, CSS e PHP, quindi ho scelto subito C#.C# System.Collections.Generic.List`1 [System.String]

Sto imparando le lezioni e imparo facendo, non leggendo. Ho deciso di creare un piccolo gioco di ruolo basato su console per imparare le lezioni. Ho un gioco base in corso, ma ho un problema. Sto provando a visualizzare l'inventario dei giocatori dalla classe Player in un'altra classe.

Sto utilizzando un elenco per conservare l'inventario dei giocatori.

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

Questo è nel file di classe Giocatori.

Quindi nella classe di negozio, sto facendo;

Player player = new Player(); 

Per rendere un nuovo oggetto per accedere alla classe giocatore. Poi per aggiungere qualcosa alla Lista nel negozio, sto facendo;

player.inventory.Add("Axe"); 

Ma se faccio il player.inventory(); stampa fuori nella console, ottengo un errore - System.Collections.Generic.List`1 [System.String].

C'è qualcuno che potrebbe aiutarmi per favore? Devo fornire più codice?

risposta

0

È necessario un ciclo foreach per iterare ogni membro del proprio elenco. Non puoi semplicemente stampare l'elenco nel suo complesso.

avete bisogno di qualcosa di simile:

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

Si sta cercando di stampare un oggetto di lista e non i valori contenuti all'interno della lista, avete bisogno di qualcosa di simile: -

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

Edit * Come per commenta

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

Ho usato l'esempio che hai postato. Funziona ora e lo userò finché non avrò modo di metterlo in un pezzo di codice a una riga. – Jon

+0

@ Jon, perché deve essere un solo rivestimento? In molti casi sceglierei il codice che è più leggibile e più facile da mantenere. Tuttavia, modificherai la mia risposta per includere una soluzione a una riga in modo che tu possa vedere come è fatta :) – DGibbs

+0

Ora che hai postato l'unica fodera, il ciclo foreach è più facile da capire. – Jon

1

stampa successiva stringa da console, se si desidera stampare tutti gli elementi contemporaneamente:

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

Console.WriteLine(items); 

questo stampa ogni elemento nella riga separata

Per impostazione predefinita ToString() (che è chiamato nella lista quando si passa a Console.WriteLine) stamperà il tipo della lista, non le si accontenta. Ecco perché ricevi System.Collections.Generic.List`1 [System.String]. sullo schermo della console.

4

Non è un errore, è solo stampare la lista. L'implementazione predefinita di Lista ToString() stampa semplicemente il nome del tipo.

Immagino vogliate che funzioni come in PHP, dove si stampano array separati da virgole?Prova:

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

Se si desidera introdurre tutti gli articoli di magazzino, il codice che scorre dovrebbe funzionare:

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

il player.inventory è un oggetto da collezione e non può essere immesso direttamente.

Problemi correlati