gpt4 book ai didi

c# - 可选参数 "must be a compile-time constant"

转载 作者:IT王子 更新时间:2023-10-29 03:53:17 26 4
gpt4 key购买 nike

我有一个分为两个部分文件的类,如下所示:

public partial class PersonRepository : BaseRepository<Person>
{
public static readonly string ColumnID = "ID";
...

public partial class PersonRepository : BaseRepository<Person>
{
public List<Person> GetByCompany(int companyID, string sortExpression = ColumnID)
{
...

但是编译器一直说 sortExpression “必须是一个编译时常量”。对我来说,这似乎是一个完美的编译时常量,所以我不明白问题出在哪里。

最佳答案

不,表达式 PersonRespository.ColumnID 不属于编译时常量。表达式“ID”是,但这不是您用作默认参数的内容。

特别是,如果 ColumnID 是“只是一个普通字段”,那么对它的任何引用都将被解析为 一个字段 - 所以如果您编译一个引用的程序集字段,然后更改值并重建包含 PersonRepository 的程序集,引用程序集看到该更改。

如果您将声明更改为:

 public const string ColumnID = "ID";

那么它一个编译时常量表达式。这意味着在我们之前的场景中,常量的值被嵌入到引用它的任何代码中 - 稍后更改值而不重新编译引用代码不会更改引用代码使用的值.

有关常量表达式的更多详细信息,请参阅 C# 4 语言规范的第 7.19 节。

关于c# - 可选参数 "must be a compile-time constant",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7672005/

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