我正在使用 Activator.CreateInstance 在运行时从 Dll 创建一个对象,
如果对象是一个接口,我会收到一个错误,并且我不想创建该接口的对象。
所以我的问题是有什么选项可以检查一个对象是否是接口而不是类?
由于我不想分别回复每个答案,因此您应该使用 type.IsAbstract 而不是 type.IsInterface,因为您也不想在抽象类上触发激活器(并且 .IsAbstract 也涵盖接口)。您可能还没有遇到这个问题,但这肯定是一个潜在的问题。
你的意思是你想检查一个类型是否是接口类型?如果是这样,这很容易:
if (type.IsInterface)
如果你的意思是“这个对象是实现任何接口的类型”,它仍然是可行的,但更难并且可能不太有用......
你可以这样做:
Type t = obj.GetType();
t.IsInterface()
这会有帮助吗?
Type t = typeof(T);
if (t.IsInterface) {
} else {
}
顺便说一句,您声明您不想创建作为接口的对象。这是不可能的,因为它是有原因的;但是,您可以实例化类并定义实现接口的结构。
var obj = new MyClass(); // OK
var s = new MyStruct(); // OK
var i = new IMyInterface(); // NOT POSSIBLE!
接口没有实现。它们是类和结构在假装实现接口时必须履行的契约。