2013-04-19 3 views
5

Итак, я начинаю курс веб-разработки в septemeber, и мы собираемся программировать на C#. Поэтому я начал изучать его, поэтому у меня есть некоторый опыт в этом. Теперь у меня есть ~ 2-летний опыт работы с HTML, CSS и PHP, поэтому я сразу же выбрал C#.C# System.Collections.Generic.List`1 [System.String]

Я изучаю классы, и я учусь, делая, а не читаю. Я решил создать небольшую консольную RPG для изучения классов. У меня есть основная игра, но у меня есть проблема. Я пытаюсь отобразить инвентарь игроков из класса Player в другом классе.

Я использую Список для хранения инвентаря игроков.

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

Это файл класса игроков.

Затем, в классе магазина, я делаю;

Player player = new Player(); 

Чтобы создать новый объект для доступа к классу игроков. Затем, чтобы добавить что-то в Список в магазине, я делаю;

player.inventory.Add("Axe"); 

Но если я делаю player.inventory(); печать в консоли, я получаю сообщение об ошибке - System.Collections.Generic.List`1 [System.String].

Есть ли кто-нибудь, кто мог бы мне помочь? Мне нужно предоставить больше кода?

ответ

0

Вам нужен цикл foreach, чтобы перебирать каждого члена вашего списка. Вы не можете просто распечатать список в целом.

Вам нужно что-то вроде:

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

Вы пытаетесь напечатать список объектов, а не значения, содержащиеся в списке, вам нужно что-то вроде: -

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

Edit * Как в комментарии

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

Я использовал приведенный вами пример. Теперь он работает, и я буду использовать его до тех пор, пока не выясню, как помещать его в одну строку кода. – Jon

+0

@Jon, зачем нужно быть одним лайнером? Во многих случаях я бы выбрал код, который более читабельен и прост в обслуживании. Тем не менее, я отредактирую свой ответ, чтобы включить однострочное решение, чтобы вы могли видеть, как это делается :) – DGibbs

+0

Теперь, когда вы разместили один лайнер, цикл foreach легче понять. – Jon

1

печать следующую строку, консоль, если вы хотите, чтобы напечатать все элементы сразу:

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

Console.WriteLine(items); 

это будет печатать каждый элемент в отдельной строке

По умолчанию ToString() (который называется в списке, когда вы передаете его Console.WriteLine) напечатает типа списка, а не само содержание. Вот почему вы получаете System.Collections.Generic.List`1 [System.String]. на экране консоли.

4

Это не ошибка, это просто распечатка списка. По умолчанию реализация List List ToString() просто печатает имя типа.

Я предполагаю, что вы хотите, чтобы он работал, как на PHP, где вы печатаете массивы, разделенные запятыми?Попробуйте:

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

Если вы хотите, чтобы ввести все предметы в инвентаре, протекающий код должен работать:

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

player.inventory является объектом сбора и не могут быть введены непосредственно.

Смежные вопросы