0

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

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

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

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

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

在此处输入图像描述

4

5 回答 5

4

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

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

    // Rest of the implementation of Sentence
}
于 2013-03-17T21:17:14.293 回答
1

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

foreach(Sentence sen in sentences){
  ListBox1.Items.Add(sen.ToString());
}
于 2013-03-17T21:18:21.873 回答
0

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

    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; }
    }
于 2013-10-07T08:14:45.550 回答
0

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

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

于 2013-03-17T21:16:23.810 回答
0

你必须覆盖ToString

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

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

注意Formatting应该禁用:

listBox1.FormattingEnabled = false;

正如这里提到的。

另一种方法是使用 Linq 和AddRange

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

(假设你的Sentence班级有一个财产Text

于 2013-03-17T21:18:10.890 回答