重写ToString()并添加到ListBox C#

Ray*_*ing 8 .net c# generics tostring winforms

谁能解释一下:

public class Test : List<int>
{
    public override string ToString()
    {
        return "My ToString";
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我实例化它并将其添加到ListBoxWindows上的控件Form,它将显示"Collection"而不是"My ToString".

Test test = new Test();
listBox1.Items.Add(test);
Run Code Online (Sandbox Code Playgroud)

我认为添加内容Items只会调用我的课程ToString().以下工作按预期进行

MessageBox.Show(test.ToString());
Run Code Online (Sandbox Code Playgroud)

man*_*nji 7

要使其工作,您必须禁用格式:

listBox1.FormattingEnabled = false;
Run Code Online (Sandbox Code Playgroud)

看起来如果格式化已启用,它会做一些魔术技巧,结果并不总是它应该是什么......


Vij*_*iri 5

将 ListBox 上的 DisplayMember 设置为 Test 类型的属性。

listBox1.DisplayMember = "Name";
Run Code Online (Sandbox Code Playgroud)

要解决您的问题,请在 Type 和 getter 调用 ToString 中添加一个名为“Name”的属性。

public class Test : List<Int32>
{
    public String Name { get { return this.ToString(); } }

    public override string ToString()
    {
        return "Test";
    }
}
Run Code Online (Sandbox Code Playgroud)