【发布时间】:2011-01-03 23:52:18
【问题描述】:
由于各种原因,我需要在 C# 中实现一个类型缓存机制。幸运的是,CLR 提供了Type.GUID 来唯一标识一个类型。不幸的是,我找不到任何方法来查找基于此 GUID 的类型。 Type.GetTypeFromCLSID() 但根据我对文档(和实验)的理解,它做了非常非常不同的事情。
是否有任何方法可以根据其 GUID 获取类型,而不是遍历所有加载的类型并与它们的 GUID 进行比较?
编辑:我忘了说我真的想要一个固定宽度的“类型指纹”,这就是为什么 GUID 对我如此有吸引力。当然,在一般情况下,类型的完全限定名称会起作用。
【问题讨论】:
-
typeof().AssemblyQualifiedName不适合您? -
Rubens:会的,但我更喜欢固定宽度的东西,因为它会大大简化我的算法(这超出了这个问题的范围)和 16 字节的固定大小GUID 将是理想的。也许我可以使用限定名称的散列码,但是在基于散列查找类型时我会遇到同样的问题。
-
请记住,散列是一种单向过程。
-
缓存还是不缓存:这是个问题;无论是承受令人发指的获取时间的吊索和箭矢,还是建立一个缓存并在作曲中损失一些,这都是更高尚的。
标签: c# .net reflection types