将类型对象的列表转换为字符串以显示在列表框上

时间:2013-03-17 21:14:23

标签: c# list listbox

我有一个类型对象的列表,如:List <Sentence> sentences = new List<Sentence>();

并且列表包含我想在列表框中显示的各种字符串/句子,但是,每当我尝试显示该列表时,列表框显示(集合)

我拥有的内容:listBox1.Items.Add(sentences);

有没有办法将该对象转换为字符串,以便列表框中的文本/句子可读?

句子结构的内容只是一个字符串变量。

enter image description here

5 个答案:

答案 0 :(得分:4)

如果您希望在列表框中显示代表Sentence实例的内容,请覆盖ToString()

public class Sentence
{
    public override string ToString()
    {
        //return something meaningful here.
    }

    // Rest of the implementation of Sentence
}

答案 1 :(得分:1)

您正在将集合项本身(即sentences)添加到ListBox控件。 您需要覆盖ToString() - 类中的Sentence - 方法,以返回句子的文本值。然后使用foreach循环并将您的句子添加到ListBox,如:

foreach(Sentence sen in sentences){
  ListBox1.Items.Add(sen.ToString());
}

答案 2 :(得分:0)

你正在看一个字符串。具体来说,你正在看到该对象的.toString()。

您希望在那里传递集合的内容 - 请尝试使用.AddRange()。

答案 3 :(得分:0)

您必须覆盖ToString

public class Sentence
{
    public string Text{ get; set; }

    public override string ToString()
    {
        return this.Text;
    }
}

请注意,应禁用Formatting

listBox1.FormattingEnabled = false;

如上所述here

另一种方法是使用Linq和AddRange

listBox1.Items.AddRange(sentences.Select(s => s.Text).ToArray());

(假设您的Sentence类有属性Text

答案 4 :(得分:0)

您似乎在列表框中添加了一个Sentence列表。我不确定你期望发生什么......我的猜测是你试图将列表中的每个句子添加到列表框中,你应该使用其他答案中描述的AddRange选项。 无论如何,如果你使用AddRange,你可以使用列表框的“DisplayMember”属性来显示在Sentence类中保存Text的属性。

    private void Form1_Load(object sender, EventArgs e)
    {
        listBox1.DisplayMember = "Text";
        listBox1.Items.Add(new Sentence { Text = "abc" });
        listBox1.Items.Add(new Sentence { Text = "abc1" });
        listBox1.Items.Add(new Sentence { Text = "abc2" });
    }

    public class Sentence
    {
        public string Text { get; set; }
    }