繁体   English   中英

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

[英]In C#, how can I tell whether a generic type, T, is (not implements!) an interface?

编辑 :我犯了一个错误,前提是错误的。 typeof(T).IsClass确实可以工作-正如所指出的typeof(T)IsInterface一样。

说我有这种方法:

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

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

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

我还能怎么做?

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

typeof(T).IsInterface

请检查此链接以获取更多详细信息。

我测试了您的情况,typeof(T)。IsClass确实有效

原来我的前提是错的。 这确实有效:

typeof(T).IsClass

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM