Jon List
Jon List

Reputation: 1512

Generic in type constraint

I'm struggling with some generics. The following is my setup:

interface I<T> { }

[...]
void Add<T>(T obj) where T : I<??> { }

How can I ensure that T in the Add method implements I?

Upvotes: 4

Views: 186

Answers (2)

Igor Zevaka
Igor Zevaka

Reputation: 76500

The following signature will allow Add to take any T that implements I<> with any type parameters.

void Add<T,S>(T obj) where T : I<S> {
}

The downside of using this method signature is that type inference doesn't kick in and you have to specify all the type parameters, which looks downright silly:

blah.Add<I<int>, int>(iInstance);

A much simpler approach is to use the below signature:

void Add<T>(I<T> obj) {
}

Upvotes: 8

Mark H
Mark H

Reputation: 13897

You need to pass the T parameter to add also.

void Add<TI, TAny>(TI obj) where TI : I<TAny>

Upvotes: 1

Related Questions