在C#中,如何判断泛型类型T是否(不是实现!)接口?

时间:2016-11-23 01:27:01

标签: c# generics types interface

编辑:我犯了一个错误,前提错了。 typeof(T).IsClass确实有效 - 正如指出的那样,是typeof(T)IsInterface。

说我有这个方法:

public T GetService<T>() where T : IService

我想测试泛型类型T是否作为接口而不是作为类发送到此方法中。换句话说,我想区分来自MyClass.GetService<IService>()MyClass.GetService<ImplementingClass>()的来电。我怎么能这样做?

我尝试使用is objectis System.Object,但它不会做出这种区分。使用typeof(T).IsClassdefault(T).IsClass也不起作用,因为System.Type返回类型始终是一个类,并且因为IsClass不可用于默认T。

我还能怎么做?

3 个答案:

答案 0 :(得分:1)

我认为您可以像下面一样检查运行时。

typeof(T).IsInterface

Please check this link了解详情。

答案 1 :(得分:1)

我测试了你的案例,typeof(T).IsClass确实有用

答案 2 :(得分:0)

事实证明我的前提是错误的。这确实有效:

typeof(T).IsClass

如果指定了接口,则返回false。