`CallerArgumentExpression` is always null (C# 10)



我正在尝试使用CallerArgumentExpression属性,并结合验证此处找到的记录的建议,但表达式始终为null。我在中执行此操作。NET6核心控制台应用程序。完全相同的代码在LinqPad 7(.NET6(中运行良好。

我有一个基本的record,它包含常见的验证方法(几乎是从另一个答案中复制的(。。。

public record CommonValidation {
internal static bool NonEmptyOrNullString(string s, [CallerArgumentExpression("s")] string expr = default) {
if (string.IsNullOrWhiteSpace(s)) {
throw new ArgumentException($"{expr} cannot be null or empty");
}
return true;
}
internal static bool NonZeroInt(int n, [CallerArgumentExpression("n")] string expr = default) {
if (n < 0) {
throw new ArgumentException($"{expr} cannot be negative");
}
return true;
}
}

然后我可以创建一个record,如下所示。。。

public record Address(string Street, string City, string State, string Country, string Postcode) : CommonValidation {
private bool _ = NonEmptyOrNullString(Street)
&& NonEmptyOrNullString(City)
&& NonEmptyOrNullString(State)
&& NonEmptyOrNullString(Country)
&& NonEmptyOrNullString(Postcode);
}

如果我尝试创建一个带有空StateAddress。。。

Address a = new("5 My Street", "Somewhere", "", "Oz", "12345");

则抛出异常,但expr变量为null。正如我所说,完全相同的代码在LinqPad中运行良好,尽管两者都使用相同版本的。NET/C#。

有人能解释控制台应用程序中出了什么问题吗?感谢

Visual Studio 2019不支持C#10。请确保您正在使用Visual Studio 2022。LinqPad 7做到了,这就是它在那里工作的原因。

最新更新