【发布时间】:2011-01-04 22:43:41
【问题描述】:
当试图在运行时定位一个类型(通常是一个类)时,如果名称传递给了
Type.GetType(string typeName, bool throwOnError = True)
找不到重载,引发的异常是TypeLoadException。
我了解这背后的想法是 CLR 认为问题在于我们尚未(尚未)加载包含所寻求类型的(或任何)程序集,但我认为问题在于是 CLR 找不到给定其名称的类。 (当然,这个名字可能拼错了。)
如果我想告诉我的面向反射的 define-code-at-runtime 工具的客户他们要求的类没有找到,我似乎有两个选择——要么用 TypeLoadException 告诉他们,要么定义我自己的 ClassNotFoundException。
我发现this link 提供了(显然很好并且肯定完整)有关创建自定义异常类(在 C# 中)的信息,但是对于(正确实现)这样一个简单的想法来说,工作量相当大。
看来我还想构建一些知道我认为我的客户可能想要使用的公共类(或其名称空间)的程序集名称的东西,以便我可以在我的用户时/当我的用户加载正确的程序集要求在一个有点知名但尚未加载的程序集中的类。这似乎也是 BCL 很可能为我们提供的一个费用。 (我想这就是 AppDomain.TypeResolve 事件的用途,但我将提出一个单独的问题,以尝试找到该概念的易于重用和可扩展的实现。)
同时,我再问一遍——为什么 ClassNotFoundException 还没有定义?
【问题讨论】:
-
您为什么将问题从 TypeNotFoundException 更改为 ClassNotFoundException? TypeNotFoundException 更符合框架。
-
Alastair 回答了这个问题;我只是补充一点,创建自定义异常类并不是很多工作,只需使用
exceptionsn-p,它会使用所有常用构造函数为您填充整个类定义。 -
山姆——因为我是个白痴。它真的应该是 TypeNFE 而不是 ClassNFE。 (我可以再改回来......)但是,将使用我正在构建的工具(在交互式解释上下文中)的开发人员几乎总是试图找到一个类。
-
Aaronaught -- 我不知道异常 sn-p;谢谢你的提示。
标签: .net exception reflection