使用泛型Collection类获取Other Class的集合

时间:2014-10-02 13:46:42

标签: c# generics collections

我有一个集合类,让我们说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

我需要做些什么才能让它发挥作用?

2 个答案:

答案 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>

以下是相关问题:Cannot implicitly convert List<T> to Collection<T>

答案 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);
}