我有一个类型对象列表,如下所示:List <Sentence> sentences = new List<Sentence>();
并且列表包含我想在列表框中显示的各种字符串/句子,但是,每次我尝试显示该列表时,列表框都会显示(集合)
我有的:listBox1.Items.Add(sentences);
有没有办法将该对象转换为字符串,以便列表中的文本/句子在列表框中可读?
句子结构的内容只是一个字符串变量。
如果您希望Sentence
在列表框中显示代表 的实例的内容,请覆盖ToString()
public class Sentence
{
public override string ToString()
{
//return something meaningful here.
}
// Rest of the implementation of Sentence
}
您正在将集合项本身(即sentences
)添加到 ListBox 控件。您需要覆盖-class 中的ToString()
-method以返回句子的文本值。Sentence
然后使用 foreach 循环并将您的句子添加到 ListBox 中,例如:
foreach(Sentence sen in sentences){
ListBox1.Items.Add(sen.ToString());
}
您似乎正在将句子列表添加到列表框中。我不确定您期望会发生什么...我的猜测是您正在尝试将列表中的每个句子添加到列表框中,因此您应该使用 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; }
}
你看到的是一个字符串。具体来说,您会看到该对象的 .toString() 。
您想在那里传递集合的内容 - 请尝试 .AddRange() 。
你必须覆盖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
)