C#10新特性之调用者表达式属性

CallerArgumentExpressionAttribute 提供有关方法调用上下文的信息。与其他 CompilerServices 属性一样,此属性应用于可选参数。在这种情况下,一个字符串:

void CheckExpression(bool condition, 
    [CallerArgumentExpression("condition")] string? message = null )
{
    Console.WriteLine($"Condition: {message}");
}

传递给 CallerArgumentExpression 的参数名称是不同参数的名称。作为参数传递给该参数的表达式将包含在字符串中。.例如,

var a = 6;
var b = true;
CheckExpression(true);
CheckExpression(b);
CheckExpression(a > 5);

// Output:
// Condition: true
// Condition: b
// Condition: a > 5

ArgumentNullException.ThrowIfNull() 是如何使用此属性的一个很好的示例。它通过默认提供的值来避免必须传入参数名称:

void MyMethod(object value)
{
    ArgumentNullException.ThrowIfNull(value);
}