如何在属性上抛出ArgumentNullException

时间:2015-01-02 14:54:25

标签: c#

我有一个方法来检查属性是否为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异常的正确方法是什么?

2 个答案:

答案 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对象本身。当然,从问题中找不到定义的逻辑,所以它现在只是在大声思考。