如何在属性上抛出 ArgumentNullException
How to throw an ArgumentNullException on a property
我有一个方法可以检查属性是否为 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
下有一个紫色的曲线,表示无法解析符号。那么,如果 StartDate 不能为 null,那么在 startdate 属性上抛出 arguementnull 异常的正确方法是什么?
如果参数 (recall
) 不为空,则不应抛出 ArgumentNullException
。当参数有问题而不是 null 时,这里只用 ArgumentException
是合适的:
if (recall == null)
{
throw new ArgumentNullException("recall");
}
if (recall.StartDate == null)
{
throw new ArgumentException("StartDate of recall must not be null",
"recall");
}
ReSharper 可能 建议您在取消引用之前对 recall
进行空引用检查?也许是这样的:
if (recall == null)
throw new ArgumentNullException("recall");
if (!recall.StartDate.HasValue)
throw new ArgumentNullException("recall.StartDate");
不过,从语义上讲,我不确定这是否真的是 ArgumentNullException
的正确用法。因为 StartDate
不是该方法的参数。这可能是个人意见,但我建议将 StartDate
有效性的逻辑放入 Recall
对象本身。当然,从问题中并不知道定义它的逻辑,所以在这一点上它真的只是大声思考。
我有一个方法可以检查属性是否为 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
下有一个紫色的曲线,表示无法解析符号。那么,如果 StartDate 不能为 null,那么在 startdate 属性上抛出 arguementnull 异常的正确方法是什么?
如果参数 (recall
) 不为空,则不应抛出 ArgumentNullException
。当参数有问题而不是 null 时,这里只用 ArgumentException
是合适的:
if (recall == null)
{
throw new ArgumentNullException("recall");
}
if (recall.StartDate == null)
{
throw new ArgumentException("StartDate of recall must not be null",
"recall");
}
ReSharper 可能 建议您在取消引用之前对 recall
进行空引用检查?也许是这样的:
if (recall == null)
throw new ArgumentNullException("recall");
if (!recall.StartDate.HasValue)
throw new ArgumentNullException("recall.StartDate");
不过,从语义上讲,我不确定这是否真的是 ArgumentNullException
的正确用法。因为 StartDate
不是该方法的参数。这可能是个人意见,但我建议将 StartDate
有效性的逻辑放入 Recall
对象本身。当然,从问题中并不知道定义它的逻辑,所以在这一点上它真的只是大声思考。