1
699
我的是C 3.0中的这个。
基本上,最少的迭代次数总是:
|
2
54
要在实现ifoo接口的程序集中查找所有类型,请执行以下操作:
注意Ryan Rinaldi的建议是错误的。它将返回0个类型。你不能写
因为类型是System.Type实例,并且永远不会是ifoo类型。相反,您要检查ifoo是否可以从类型中赋值。这将得到你期望的结果。 另外,亚当·赖特的建议(目前标记为答案)也是不正确的,原因也是一样的。在运行时,您将看到0类型返回,因为所有System.Type实例都不是IFOO实现者。 |
3
54
这对我有用。它循环访问类并检查它们是否从MyInterface中脱离出来。
|
4
46
我很感激这是一个非常古老的问题,但我想我会为未来的用户添加另一个答案,因为迄今为止所有的答案都使用某种形式的
虽然gettypes()确实会返回所有类型,但并不一定意味着您可以激活它们,从而可能引发
当返回的类型是
所以说我们有:
如果在
然后它会抛出一个
这是因为没有参考
换言之
为了安全地限定可加载类型的结果集,然后根据 Phil Haacked 文章 Get All Types in an Assembly 和 Jon Skeet code 相反,您可以执行如下操作:
然后:
|
5
19
此处的其他答案使用
下面是一个检查当前正在执行的程序集文件夹中所有程序集的示例,查找实现特定接口的类(为了清晰起见,避免使用LINQ)。
如果要匹配多个接口,可以设置接口列表。 |
6
15
循环所有加载的程序集,循环所有类型,并检查它们是否实现接口。 类似:
|
7
8
这对我很有效(如果希望在查找中排除系统类型):
|
8
5
编辑:我刚刚看到编辑,澄清了最初的问题是为了减少迭代/代码,这是一个很好的练习,但在现实情况下,你会想要最快的实现,不管基础LINQ看起来有多酷。 下面是我的utils方法,用于遍历加载的类型。它处理常规类和接口,如果您在自己的/第三方代码库中寻找实现,excludeSystemTypes选项可以极大地加快速度。
我承认这不漂亮。 |
9
4
其他答案不适用于 通用接口 . 这样,只需将typeof(isomeinterface)替换为typeof(t)。
所以用
我们得到所有的集会
用于排除接口和抽象接口以及
把它们列在清单上。 |
10
2
要想做你想做的事,没有一个简单的方法(就性能而言)。 反射主要与程序集和类型一起工作,因此您必须获取程序集的所有类型,并查询它们以获得正确的接口。下面是一个例子:
这将获得在程序集myassembly中实现imyinterface的所有类型 |
11
0
我在LINQ代码中得到了异常,所以我这样做(没有复杂的扩展):
|
12
0
在选择装配位置时更好。如果知道所有实现的接口都在同一assembly.definedtype中,则筛选大多数程序集。
|
13
-3
您可以使用一些LINQ来获取列表:
但是,真的,这更易读吗? |
Hatsune Miku · 比较或if语句是否更快[已关闭] 1 年前 |
Black Swan · 无法解压缩的值太多(应为2)错误 1 年前 |
Kai · 有什么方法可以轻松优化VSCode中的锈迹? 2 年前 |
Balfar · 处理NumPy阵列上的循环最有效的方法是什么? 2 年前 |
Daniel · C#轻松存储快速访问的大型位矩阵 6 年前 |
halbe · 优化音频DSP程序的numpy计算 6 年前 |
Afsara · 是否有任何方法不能优化我们的应用程序? 6 年前 |