Public interface IRuleObject {}

Public class RuleBase : IRuleObject {}

Public class Length : RuleBase {}

Public class Range : RuleBase {}

Public class SetDefault : IRuleObject {}


我正在尝试编写一段代码,在其中我可以获取实现的所有类
IRuleObject ...

正如您所注意到的,一些规则可能是从实现IRuleObject的RuleBase派生的,还有其他一些规则没有继承RuleBase而是尝试自己实现IRuleObject。以上所有规则均可分配给IRuleObject。

我试过了 :

Assembly dll = Assembly.GetAssembly(typeof(IRuleObject));
var rules = dll.GetTypes().Where(x => x.IsAssignableFrom(typeof(IRuleObject)));


但是它无法检索规则
想法表示赞赏:-)
谢谢

最佳答案

我认为您刚从错误的方向获得了IsAssignable。尝试:

var rules = dll.GetTypes()
               .Where(x => typeof(IRuleObject).IsAssignableFrom(x));


当涉及泛型时,这种事情会变得非常棘手,但是在您的情况下,它应该足够简单。

09-06 16:12