Throw what on Type.GetType(..) == null?

本文关键字:null GetType what on Type Throw | 更新日期: 2023-09-27 18:10:29

在使用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);
}

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

这里我倾向于后一种情况,因为您既可以获得真正的typeloadeexception,也可以获得特定于此用例的一些附加信息。还是应该只考虑typeloadeexception本身对最终用户来说就足够了?

想法吗?

[edit]有关更多上下文,请参见https://github.com/akkadotnet/akka.net/issues/1279

Akka

。NET中,我们可以对actor进行"远程部署"。如果接收部署请求的远程系统不知道应该部署的类型,我们需要以某种方式通知它。只抛出typeloadeexception感觉有点便宜,因为它不会将问题定位到远程部署场景。

Throw what on Type.GetType(..) == null?

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

问题是——对于你抛出的异常,你希望用户做什么?您提供的"某些消息"是否比原始异常提供了更多细节?或者如果它得到特定的异常类型,它会让用户做不同的事情吗?如果没有,我就会让原来的异常冒泡。