在底層使用Type.GetType(typeName)
的公共API中,最正確的做法是什麼?在Type.GetType(..)== null上拋出什麼?
//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本身對於最終用戶來說足夠了嗎?
想法?
[編輯]更多的情況下,看到 https://github.com/akkadotnet/akka.net/issues/1279
在Akka.NET我們可以做演員的 「遠程部署」。 如果接收到部署請求的遠程系統不知道應該部署的類型,我們需要以某種方式通知它。 只拋出TypeLoadException感覺有點便宜,因爲它沒有找到問題的遠程部署方案。
如果未找到類型,GetType(typeName)將返回null。如果傳遞「false」,那麼重載也是如此。 –
它很大程度上取決於*其中'typeName'來自哪裏。 「框架」說明嚴重傾向於YouAreScrewedCallSupportException。 –