在c#中转换泛型类型

Bar*_*ğlu 0 .net c# generics generic-collections

我有一个像下面这样的结构.我在返回通用集合时遇到了一些麻烦.我错过了什么?

class Program
{
    static void Main()
    {
          BusinessCollection businessCollection = new BusinessCollection();

          //Why this is not working because businesscollection is a GenericCollection<BusinessEntity>
          businessCollection = new GenericCollection<BusinessEntity>();

          //or neither this
         businessCollection = (BusinessCollection)new GenericCollection<BusinessEntity>();
    }
}



public class BusinessEntity
{
   public string Foo { get; set;}
}

public class BusinessCollection : GenericCollection<BusinessEntity>
{
     //some implementation here
}

public class GenericCollection<T> : ICollection<T>
{
    //some implementation here
}
Run Code Online (Sandbox Code Playgroud)

Syn*_*der 5

你不能做你想做的事.反过来会有效.

所有BusinessCollection的确是GenericCollection<BusinessEntity>,但你不能肯定地说,所有GenericCollection<BusinessEntity>BusinessCollection

所以以下内容将有效.

class Program
{
    static void Main()
    {
          GenericCollection<BusinessEntity> businessCollection = new BusinessCollection();
          //this will work
          BusinessCollection tempCollection = (BusinessCollection)businessCollection ;
    }
}



public class BusinessEntity
{
   public string Foo { get; set;}
}

public class BusinessCollection : GenericCollection<BusinessEntity>
{
     //some implementation here
}

public class GenericCollection<T> : ICollection<T>
{
    //some implementation here
}
Run Code Online (Sandbox Code Playgroud)