我有一个集合类,让我们说UserCollection
,它来自Collection
(泛型集合的基类)。
现在我想要一个UserCollection
,这是我的代码,但它说它无法从通用List
转换为我的集合类:
public class User
{
// All user Fields
}
public class UserCollection : Collection<User>
{
public static UserCollection GetUserCollection()
{
DataTable table = ...//all users data from DB
List<User> userList = table.ToCollection<User>(); // Call an extension method to convert to generic List of user
return userList; // Cannot implicitly convert type 'System.Collections.Generic.List<User>' to 'UserCollection'
}
}
// ToCollection功能在这里
http://www.codeproject.com/Tips/195889/Convert-Datatable-to-Collection-using-Generic
我需要做些什么才能让它发挥作用?
答案 0 :(得分:2)
您可以提供一个调用基础构造函数的适当构造函数:
public class UserCollection : Collection<User>
{
public UserCollection() { }
public UserCollection(IList<User> users) : base(users) { }
public static UserCollection GetUserCollection()
{
// ...
List<User> userList = ...
return new UserCollection(userList);
}
}
或者您必须返回ICollection<User>
,因为List<User>
不是Collection<User>
或UserCollection
的子类,但它实现了ICollection<User>
。
答案 1 :(得分:0)
这有两个原因无效。首先,您不能将类强制转换为继承的类。 UserCollection是一个Collection,但Collection不是UserCollection。您可以将UserCollection分配给Collection变量,但不能相反。此外,您正在从ToCollection方法接收List。您遇到了相同的场景:Collection&lt;&gt;不是列表&lt;&gt;。有关投射的详情,请参阅http://msdn.microsoft.com/en-us/library/ms173105.aspx。
一种解决方案是实现一个构造函数,该构造函数调用带有IList&lt;&gt;的基础构造函数。像这样:
public UserCollection(IList<User> users)
: base(users)
{
}
然后你可以修改你的GetUserCollection方法来调用它:
public static UserCollection GetUserCollection()
{
DataTable table = ...//all users data from DB
List<User> userList = table.ToCollection<User>();
return new UserCollection(userList);
}