gpt4 book ai didi

c# - ListBox,实现相同接口(interface)的不同对象的列表

转载 作者:行者123 更新时间:2023-11-30 18:09:55 25 4
gpt4 key购买 nike

我有两个对象:User 和 Client,都实现了 IMember 接口(interface)

interface IMember
{
int Id { get; set; }
string Name { get; set; }
}

在一个表单中,我设置了 ListBox 数据源:

myListBox.DisplayMember = "Name";
myListBox.ValueMember = "Id";
myListBox.DataSource = membersList; // List<IMember>

奇怪的事情发生了;)当我运行程序时,第一个对象(用户类型)正确显示(Adrian Serafin),其他对象(联系人类型)显示如下:

MyProject.Client#20
MyProject.Client#40

至于显示是对它们的 ToString() 调用。

我不能在 ListBox 中使用实现与数据源相同接口(interface)的不同对象的列表,或者我在这里犯了一些错误?

最佳答案

确定List<IMember> ,而不是 ArrayList ?这有很大的不同,因为存在非 object公共(public)索引器 ( public SomeType this[int] {get;set;} ) 产生了的不同。以下工作正常:

using System;
using System.Collections.Generic;
using System.Windows.Forms;
interface IMember
{
int Id { get; set; }
string Name { get; set; }
}
class Foo : IMember
{
public int Id { get; set; }
public string Name { get; set; }
}
class Bar : IMember
{ // explicit, why not...
int IMember.Id { get; set; }
string IMember.Name { get; set; }
}
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
IMember bar = new Bar();
bar.Id = 2;
bar.Name = "def";
var list = new List<IMember> {
new Foo { Id = 1, Name = "abc"},
bar,
};
Application.Run(new Form
{
Controls = {
new ListBox {
Dock = DockStyle.Fill,
DisplayMember = "Name",
ValueMember = "Id",
DataSource = list
}
}
});

}
}

关于c# - ListBox,实现相同接口(interface)的不同对象的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2099779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com