浏览Moq代码,我看到了这段代码。我希望有人可以解释Guard.NotNull调用中发生的事情,如下所示。这是来自ExtensionExpression.cs,万一有人想知道
public static LambdaExpression ToLambda(this Expression expression)
{
Guard.NotNull(() => expression, expression);
/* other code suppressed...
/* code from Guard.cs */
internal static class Guard
{
/// <summary>
/// Ensures the given <paramref name="value"/> is not null.
/// Throws <see cref="ArgumentNullException"/> otherwise.
/// </summary>
public static void NotNull<T>(Expression<Func<T>> reference, T value)
{
if (value == null)
{
throw new ArgumentNullException(GetParameterName(reference));
}
}
/* rest of code suppressed */
答案 0 :(得分:3)
它所做的只是在异常中返回参数的名称,而不是在值为null时对其进行硬编码。在Moq的情况下,参数的名称很可能来自测试本身,因此很难在Moq代码中对其进行硬编码。
表达式可以捕获有关方法/属性的信息,例如其名称。