在使用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感觉有点便宜,因为它没有指出远程部署方案的问题。
答案 0 :(得分:2)
这里没有正确和错误的答案。权衡是在抛出的异常中提供更多详细信息,而不是抛出两个异常抛出(原始异常和自定义异常)而不是一个异常。
问题是 - 您希望用户做什么除了您抛出的异常?您提供的“某些消息”是否提供了比原始异常更多的详细信息?或者它是否让用户在获得特定异常类型时执行其他操作?如果没有,我只是让原来的异常冒出来。