编辑:我犯了一个错误,前提是错误的。 typeof(T).IsClass确实可行 - 正如所指出的那样,typeof(T)IsInterface也是如此。在C#中,如何判断泛型类型T是否(不实现!)接口?
说我有这样的方法:
public T GetService<T>() where T : IService
我想测试通用型,T是否被送入该方法的接口,而不是作为一个阶级。换句话说,我想区分来自MyClass.GetService<IService>()
和MyClass.GetService<ImplementingClass>()
的电话。我怎样才能做到这一点?
我尝试使用is object
和is System.Object
,但它不会作出此区别。使用typeof(T).IsClass
和default(T).IsClass
也不起作用,因为分别返回类型System.Type始终是一个类,并且IsClass不可用于默认的T.
我该怎么办?
你试过简单的转换,然后检查是否为空? http://stackoverflow.com/questions/13405714/is-versus-try-cast-with-null-check –
在你的情况下,如果不引发编译器异常,对象T总是应该实现IService。所以我不明白你的问题。 – mybirthname
我实际上并不是想知道T是否实现了接口,我想阻止类的用户使用实现调用此方法 - 它们应该使用接口返回类型。 – Joseph