`CallerArgumentExpression` 始终为 null (C# 10)

`CallerArgumentExpression` is always null (C# 10)

我正在尝试使用 CallerArgumentExpression attribute, in conjunction with the suggestion for validating records ,但表达式始终为空。我在 .NET6 Core 控制台应用程序中执行此操作。完全相同的代码在 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变量为空。正如我所说,完全相同的代码在 LinqPad 中运行良好,即使两者都使用相同版本的 .NET/C#.

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

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