使用反射,如何以最少的代码获得使用C#3.0/.NET 3.5实现接口(interface)的所有类型,并最大程度地减少迭代次数?

这是我要重写的内容:

foreach (Type t in this.GetType().Assembly.GetTypes())
    if (t is IMyInterface)
        ; //do stuff

最佳答案

我在C#3.0中会是这样的:)

var type = typeof(IMyInterface);
var types = AppDomain.CurrentDomain.GetAssemblies()
    .SelectMany(s => s.GetTypes())
    .Where(p => type.IsAssignableFrom(p));

基本上,最少的迭代次数始终是:
loop assemblies
 loop types
  see if implemented.

10-07 13:25