Reputation: 190907
I want to do something like this:
class SomeClass<T>
{
SomeClass()
{
bool IsInterface = T is ISomeInterface;
}
}
What is the best way for something like this?
Note: I am not looking to constrain T
with a where
, but I would like my code to be aware of what types of interfaces T
implements. I would prefer that I don't have to construct a T
.
Upvotes: 27
Views: 11407
Reputation: 21928
should use following instead
bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T));
is operator
is
operator is used to check whether the run-time type
of an object
is compatible
with a given type
.
An expression where the use of is
conforms to the syntax, evaluates to true, if both of the following conditions are met:
References
Upvotes: 9
Reputation: 140753
bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T))
Upvotes: 1
Reputation: 49978
You can use IsAssignableFrom:
class SomeClass<T>
{
SomeClass()
{
bool IsIComparable = typeof(IComparable).IsAssignableFrom(typeof(T));
}
}
Upvotes: 1
Reputation: 24403
You could try doing something like
Type Ttype = typeof(T);
That will give you the full power of the Type class, which has functions like "FindInterfaces".
Upvotes: 0
Reputation: 103485
I believe the best you can do it:
bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T));
Upvotes: 0
Reputation: 158309
I don't think you can use the is
operator for this. But you can use IsAssignableFrom:
bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T));
Upvotes: 33