在Type.GetType(..)== null上抛出什么?

时间:2015-08-31 16:14:17

标签: 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 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);
}

在这种情况下,您认为哪种方法对最终用户最有帮助?

我倾向于后一种情况,因为你得到了真正的TypeLoadException和一些特定于这个用例的附加信息。 或者我们应该只考虑TypeLoadException本身对最终用户来说是否足够?

思想?

[edit]了解更多背景信息,请参阅 https://github.com/akkadotnet/akka.net/issues/1279

在Akka.NET中,我们可以对演员进行“远程部署”。 如果接收部署请求的远程系统不知道应该部署的类型,我们需要以某种方式通知它。 只抛出TypeLoadException感觉有点便宜,因为它没有指出远程部署方案的问题。

1 个答案:

答案 0 :(得分:2)

这里没有正确和错误的答案。权衡是在抛出的异常中提供更多详细信息,而不是抛出两个异常抛出(原始异常和自定义异常)而不是一个异常。

问题是 - 您希望用户做什么除了您抛出的异常?您提供的“某些消​​息”是否提供了比原始异常更多的详细信息?或者它是否让用户在获得特定异常类型时执行其他操作?如果没有,我只是让原来的异常冒出来。