C# 在类型上抛出什么。GetType(..)=null?

C# 在类型上抛出什么。GetType(..)=null?,c#,exception,C#,Exception,在使用Type.GetType(typeName)的公共API中,最正确的做法是什么 //inside a message deserializer of a framework... .... //1. throw TypeLoadException var type = Type.GetType(typeName,true); //2. or.. var type = Type.GetType(typeName,false); if (type == null) throw n

在使用
Type.GetType(typeName)
的公共API中,最正确的做法是什么

//inside a message deserializer of a framework...
....

//1. throw TypeLoadException
var type = Type.GetType(typeName,true);


//2. or..
var type = Type.GetType(typeName,false);
if (type == null)
    throw new SomeMoreSpecificException("Could not find message type " + typeName +", deserialization failed");


//3. or
Type type;
try
{
  type = Type.GetType(typeName,true);
}
catch(TypeLoadException x)
{
    throw new SomeMoreSpecificException("some message",x);
}
<> P>以上的方法中哪种方法对最终用户最有用? 我倾向于后一种情况,因为您得到了真正的TypeLoadException和一些特定于此用例的附加信息。 或者我们应该只考虑终端用户自己的类型文件是否足够?

想法

[编辑]有关更多上下文,请参阅

在Akka.NET中,我们可以对参与者进行“远程部署”。 如果接收部署请求的远程系统不知道应该部署的类型,我们需要以某种方式通知它。
只有抛出TypeLoadException感觉有点便宜,因为它没有将问题精确定位到远程部署场景。

这里没有正确和错误的答案。折衷的办法是在抛出的异常中提供更多的细节,而不是抛出两个异常(原始异常和自定义异常)而不是一个异常

问题是-对于您抛出的异常,您希望用户做什么?您提供的“某些消息”是否比原始异常提供了更多详细信息?或者,如果用户获得特定的异常类型,它是否允许用户执行不同的操作?如果没有,我就让原始异常冒泡出来。

如果找不到类型,GetType(typeName)将返回null。如果传递了
false
,则重载也是如此。这在很大程度上取决于
typeName
的确切来源。“框架”说明严重倾向于YouAreScrewedCallSupportException。