我有一个类型对象的列表,如:List <Sentence> sentences = new List<Sentence>();
并且列表包含我想在列表框中显示的各种字符串/句子,但是,每当我尝试显示该列表时,列表框显示(集合)
我拥有的内容:listBox1.Items.Add(sentences);
有没有办法将该对象转换为字符串,以便列表框中的文本/句子可读?
句子结构的内容只是一个字符串变量。
答案 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; }
}