我试图通过反射在类的接口(interface)上执行查询,但是方法Type.GetInterfaces()也返回所有继承的接口(interface)。

等等

public class Test : ITest { }

public interface ITest : ITesting { }

编码
typeof(Test).GetInterfaces();

将返回一个同时包含Type[]ITestITesting,在这里,我只想要ITest,还有另一种方法可以让您指定继承吗?

谢谢,
亚历克斯

编辑:
从下面的答案中我收集到了这一点,
Type t;
t.GetInterfaces().Where(i => !t.GetInterfaces().Any(i2 => i2.GetInterfaces().Contains(i)));

以上似乎有效,如果不正确,请在评论中纠正我

最佳答案

您可以尝试如下操作:

Type[] allInterfaces = typeof(Test).GetInterfaces();
var exceptInheritedInterfaces = allInterfaces.Except(
  allInterfaces.SelectMany(t => t.GetInterfaces())
);

因此,如果您有这样的事情:
public interface A : B
{
}

public interface B : C
{
}

public interface C
{
}

public interface D
{
}

public class MyType : A, D
{
}

该代码将返回 A D

关于c# - 仅查找非继承接口(interface)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7563269/

10-12 17:48