我在试着使用
CallerArgumentExpression
attribute
,与建议一起验证记录
found here
,但表达式始终为空。我是在一个特殊的环境中做这件事的。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;
}
}
然后我可以创建一个
记录
如下。。。
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);
}
如果我试图创造一个
Address
空空荡荡的
State
...
Address a = new("5 My Street", "Somewhere", "", "Oz", "12345");
...然后抛出异常,但是
expr
变量为空。正如我所说,完全相同的代码在LinqPad中可以正常工作,尽管两者都使用相同版本的。NET/C#。
有人能解释一下控制台应用程序出了什么问题吗?谢谢