我有一个方法来检查属性是否为null。如果对象为null,我知道如何抛出一个arguement null异常,但是如何为该对象的属性抛出一个arguementnullexception。
private int CalculateCompletedDateDiff(Recall recall)
{
if (!recall.StartDate.HasValue)
{
throw new ArgumentNullException("recall.StartDate");
}
//calculate and return
}
我正在使用resharper,recall.StartDate
下面有紫色的scriggly说无法解析符号。那么,如果StartDate不能为null,那么在startdate属性上抛出arguementnull异常的正确方法是什么?
答案 0 :(得分:13)
如果参数(ArgumentNullException
)不为空,则不应抛出recall
。只要ArgumentException
适用于参数的某些问题而不是它为null,这只适合if (recall == null)
{
throw new ArgumentNullException("recall");
}
if (recall.StartDate == null)
{
throw new ArgumentException("StartDate of recall must not be null",
"recall");
}
:
{{1}}
答案 1 :(得分:3)
ReSharper 可能建议您在取消引用之前对recall
进行空引用检查?也许是这样的:
if (recall == null)
throw new ArgumentNullException("recall");
if (!recall.StartDate.HasValue)
throw new ArgumentNullException("recall.StartDate");
从语义上讲,我不确定这是否真正适用于ArgumentNullException
。由于StartDate
不是该方法的参数。这可能是个人观点,但我建议将StartDate
的有效性逻辑放入Recall
对象本身。当然,从问题中找不到定义的逻辑,所以它现在只是在大声思考。