我使用參數對象來封裝傳遞給我的業務規則的參數。該規則是使用上下文參數創建的,然後可以修改該參數,然後在稍後執行該規則。該對象的某些屬性是必需的,否則該方法將拋出一個NullReferenceException
。但是,如果我拋出ArgumentNullException
,我會收到警告,說明參數名稱與我的某個參數不匹配。這種情況適合的例外是什麼?當參數對象的必需屬性爲空時,應拋出哪個異常
public class GetAttributes : BusinessRuleBase
{
private readonly IGetAttributesContext _context;
public GetAttributes(IGetAttributesContext context)
{
_context = context;
}
public override void Execute()
{
if (_context.AttributeModel == null)
{
//Exception would be thrown here
}
_context.Attributes = _context.AttributeModel
.DoSomething(_context.EntityType);
}
}
我建議使用代碼合同代替。 'ArgumentNullException'並不是很有用,因爲任何這種類型的catch都很可能代表一個bug。 –
許多人認爲你永遠不應該拋出一個可以被系統自動提升的類型的異常 - 而'NullReferenceException'就是其中之一。 –
爲什麼不'InvalidOperationException? –