gpt4 book ai didi

c# - `CallerArgumentExpression` 始终为空 (C# 10)

转载 作者:行者123 更新时间:2023-12-05 02:36:24 25 4
gpt4 key购买 nike

我正在尝试使用 CallerArgumentExpression attribute , 结合验证记录的建议 found here ,但表达式始终为空。我在 .NET6 Core 控制台应用程序中执行此操作。完全相同的代码在 LinqPad 7 (.NET6) 中运行良好。

我有一个基本的记录,其中包含常见的验证方法(几乎是从其他答案中复制的)...

  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);
}

如果我尝试用一​​个空的 State 创建一个 Address...

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

...然后抛出异常,但是 expr 变量为空。正如我所说,完全相同的代码在 LinqPad 中运行良好,即使两者使用相同版本的 .NET/C#。

谁能解释一下控制台应用程序出了什么问题?谢谢

最佳答案

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

关于c# - `CallerArgumentExpression` 始终为空 (C# 10),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70263804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com