开发者

Generic type in generic collection

开发者 https://www.devze.com 2022-12-25 14:55 出处:网络
I havegeneric type that looks like: public class GenericClass<T, U> where T : IComparable<T>

I have generic type that looks like:

public class GenericClass<T, U> where T : IComparable<T>
{
    // Class definition here
}

I then have a collection of these instances. What is the cleanest way to pass through the type constraints?

public class GenericCollection<V> where V : GenericClass<T, U> // This won't compile
{
    private GenericClass<T, U>[] entries;

    public V this[index]
    {
        get{ return this.entries[index]; }
    }
}

Is there perhaps a better way to design this? I think that specifying

GenericCollection<T, U, V> where V : GenericClass<T, U> 

seems awk开发者_如何学运维ward. Might be my only option though....


When creating a generic class, all generic type parameters of all objects used in all members of the generic class must be resolvable at compile time.

You can have type parameters that are specific instances of other generic types - for example:

public class GenericCollection<T> where T : GenericClass<int, string> { ... }

But if you want the type parameters of GenericClass to be generic themselves, then all of those types need to be part of the class declaration, as you've written:

GenericCollection<T, U, V> where V : GenericClass<T, U> 

Sorry if it seems awkward, but that's your only option.


I think the collection will need the same constraints as GenericClass:

public class GenericCollection<T, U> where T : IComparable<T>
{
    private GenericClass<T, U>[] entries;
}


I think your solution is

public class GenericClass<T, U> where T : IComparable<T>
{
     // Class definition here
}

public class GenericCollection<T,U>  where T : IComparable<T>
{
     private GenericClass<T, U>[] entries;
     public GenericClass<T, U> this[int index]
      {
         get{ return this.entries[index]; }
      }
}


I think this is what you really want..

    class g<t, u> where t : IComparable<t>
{
}

class gc<t, u>
{
    private g<t, u>[] entries;

    public g<t, u> this[int index]
    {
        get { return this.entries[index]; }
    }
}


you haven't declared it as a class!

public class GenericCollection<V>
0

精彩评论

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