我尝试将对象插入到通用BindingList中。 但是如果我尝试添加特定对象,编译器会说: “参数类型...不能分配给参数类型”
private void JoinLeaveItem<T>(BindingList<T> collection)
{
if (collection.GetType().GetGenericArguments()[0] == typeof(UserInformation))
{
var tmp = new UserInformation();
collection.Add(tmp);
}
}
请帮帮我
答案 0 :(得分:1)
在强类型列表中,不能有两种不同类型的对象没有共同的anscestor。那就是:在你的情况下,你将需要不同的集合,除非你的两个(或更多)类有一个共同的基类。
尝试创建重载,例如
private void JoinLeaveItem(BindingList<UserInformation> collection)
{
collection.Add(new UserInformation());
}
private void JoinLeaveItem(BindingList<GroupInformation> collection)
{
collection.Add(new GroupInformation());
}
像这样使用
JoinLeaveItem(userInformationCollection)
JoinLeaveItem(groupInformationCollection)
注意:我已经内联了tmp
变量。
答案 1 :(得分:0)
根据你在评论中描述的内容,你想做这样的事情......
private void JoinLeaveItem<T>(BindingList<T> collection) where T: new()
{
var tmp = new T();
collection.Add(tmp);
}
EDIT 如果您想添加额外的测试以限制您指定的项目,您可以在开头添加一个大测试
private void JoinLeaveItem<T>(BindingList<T> collection) where T: new()
{
if (typeof(T) == typeof(UserInformation) || typeof(T) == typeof(GroupInformation)
var tmp = new T();
collection.Add(tmp);
}
}
或者,您可以通过使用界面制作更通用的解决方案。
定义界面
public interface ILeaveItem { }
让UserInformation和GroupInformation继承它,然后使用
private void JoinLeaveItem<T>(BindingList<T> collection) where T: ILeaveItem, new()
{
var tmp = new T();
collection.Add(tmp);
}