2013-08-17 3 views
0

У меня есть listbox с именем listBox2, который я пытаюсь заполнить. «ProSailor» - это класс, а три числа в конце - значения из указанного класса.Как заполнить список со списком <string> данные

Мне нужно добавить эти значения в listBox2.

public string[] listBoxBoard = new string[10]; 
    List<string> _scoreboard = new List<string>(); 
    ProSailor sailor1 = new ProSailor(1, 24, 7); 
    ProSailor sailor2 = new ProSailor(2, 23, 14); 
    ProSailor sailor3 = new ProSailor(3, 20, 5); 

Однако, если я пытаюсь это:

_scoreboard.Add(sailor1); 

Я просто получить две ошибки, которые говорят:

  1. Лучший перегруженный метод подходит для «System.Collections.Generic. Список.Add (строка) 'имеет некоторые недействительные аргументы

  2. Аргумент 1: не удается преобразовать из «SailingEvent.ProSailor» в «строка»

Я также попытался:

_scoreboard.Add(listBoxBoard[0]); 

Это не возвращает никаких ошибок, но не заполнить ListBox.

+0

Передача listboxboard ничего не сделает, потому что вы никогда не назначали ему значения. –

+0

У вас есть строковый общий список, а не тип ProSailer.Если вы хотите добиться этого, вы должны переопределить ToString() в классе ProSailor или создать свой список: Список _scoreBoard = новый Список (); – JustWork

+0

Я не вижу никакого вызова listBox2.add в вашем коде, где код вызывает эту функцию? вы должны иметь возможность добавлять и видеть имя типа в списке – OopsUser

ответ

1

В вашем классе ProSailer вы переопределяете функцию ToString(), чтобы Listbox знал, что отображать. Добавьте вашу коллекцию ProSailor в Listbox, так как она добавляет элементы как объекты, которые включают объекты класса.

public override string ToString() 
    { 
    return "your string to display"; 
    } 
1

Причина вы получаете несоответствие типов, потому что вы инициализирован свой список, как List<string>, а затем попытаться добавить объект в ProSailor типа в списке. Если моряк имеет некоторое строковое свойство можно попробовать следующее:

сказать ProSailor выглядит примерно так:

class ProSailor 
    { 
     public string MyStringProperty { get; set; } 

     public ProSailor(int a, int b, int c) 
     { 
     } 
    } 

то, чтобы выполнить то, что вы делаете:

  List<ProSailor> sailorList = (new ProSailor[] 
      { 
       new ProSailor(1, 24, 7), 
       new ProSailor(2, 23, 14), 
       new ProSailor(3, 20, 5) 
      }).ToList(); 

      List<string> stringList = sailorList.Select(s => s.MyStringProperty).ToList(); 
0

Если ваш класс выглядит как этот:

class ProSailor 
{ 
    public ProSailor(int num1, int num2, int num3) 
    { 
     Num1 = num1; 
     Num2 = num2; 
     Num3 = num3; 
    } 

    public int Num1 { get; set; } 
    public int Num2 { get; set; } 
    public int Num3 { get; set; } 
} 

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

class ProSailor 
{ 
    public ProSailor(int num1, int num2, int num3) 
    { 
     Num1 = num1; 
     Num2 = num2; 
     Num3 = num3;  
    } 

    public int Num1 { get; set; } 
    public int Num2 { get; set; } 
    public int Num3 { get; set; } 

    public List<string> GetAllValues() 
    { 
     return new List<string> { Num1.ToString(), Num2.ToString(), Num3.ToString() }; 
    } 
} 

Теперь, если вы хотите создать один список строки и объединить значения из нескольких объектов можно использовать AddRange Methond:

List<string> _scoreboard = new List<string>(); 
ProSailor sailor1 = new ProSailor(1, 24, 7); 
ProSailor sailor2 = new ProSailor(2, 23, 14); 
ProSailor sailor3 = new ProSailor(3, 20, 5); 

_scoreboard.AddRange(sailor1.GetAllValues()); 
_scoreboard.AddRange(sailor2.GetAllValues()); 
_scoreboard.AddRange(sailor3.GetAllValues()); 

Теперь вы можете заполнить свой список, используя следующий код:

listBox2.DataSource = _scoreboard; 
Смежные вопросы