开发者

Specifying Type Contraints on a Generic Generic Type

开发者 https://www.devze.com 2023-02-22 05:01 出处:网络
I have a generic collection based type that holds other generic types: class Collection<T> { } class ItemType<K>

I have a generic collection based type that holds other generic types:

class Collection<T>
{
}

class ItemType<K>
{
}

Collection<ItemType<string>> c = new Collection<ItemType<string>>();

Is there a way to specify the constraints for Collection<T> such that T is an ItemType with any type K? Sort of like this with fake syntax:

class Collection<T> where T : ItemTyp开发者_StackOverflowe<>
{
}


Yup

Depending on what you actually need, you can do:

  class Collection<T>{}
  class ItemTypeCollection<T> : Collection<ItemType<T>>{} 

or

  class Collection<TContainer,TItem>
       where TContainer : ItemType<TItem>
  {

  }

Which one you choose depends on whether or not derivatives of ItemType<T> have different interfaces than ItemType<T>

There is one other approach as well that might work for you. But, it is a little bit more complicated.

You can create a non-generic base class or interface, such as IItemType and make the generic class ItemType<T> implement that non-generic IItemType.

Then you can write

 class Collection<T>
      where T: IItemType{}

Then, if your IItemType implementation is generic, you can create a Collection<ItemType<T>>. If you try to make a Collection<T> and T doesn't implement IItemType, then it will not compile


Try this:

class ItemTypeCollection<T, K> : Collection<T> where T : ItemType<K>
{
}
0

精彩评论

暂无评论...
验证码 换一张
取 消