我有一个类分为两个部分文件,如下所示:
public partial class PersonRepository : BaseRepository<Person>
{
public static readonly string ColumnID = "ID";
...
and
public partial class PersonRepository : BaseRepository<Person>
{
public List<Person> GetByCompany(int companyID, string sortExpression = ColumnID)
{
...
但编译器一直说sortExpression
“必须是编译时常量”。对我来说,这似乎是一个完美的编译时常量,所以我不明白问题出在哪里。
不,表达PersonRespository.ColumnID
不被归类为编译时常量。表达式“ID”是,但这不是您用作默认参数的内容。
特别是,如果ColumnID
是“只是一个普通字段”,那么对它的任何引用都将被解析as字段 - 因此,如果您编译引用该字段的程序集,则更改值并重建包含的程序集PersonRepository
,参考组件will看到那个变化。
如果您将声明更改为:
public const string ColumnID = "ID";
then it is编译时常量表达式。这意味着在我们之前的场景中,常量的值被烘焙到引用它的任何代码中 - 并且稍后更改该值,而无需重新编译该引用代码won't更改该引用代码使用的值。
有关什么算作常量表达式的更多详细信息,请参阅 C# 4 语言规范的第 7.19 节。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)