谁能解释为什么这段代码有效:
public class AdministratorSettingValidationAttribute : Attribute
{
public AdministratorSettingValidationAttribute(AdministratorSettingDataType administratorSettingDataType)
{
DataType = administratorSettingDataType;
}
public AdministratorSettingValidationAttribute(AdministratorSettingDataType administratorSettingDataType, Type enumerationType)
{
DataType = administratorSettingDataType;
EnumerationType = enumerationType;
}
}
...但将其重构为使用可选参数:
public AdministratorSettingValidationAttribute(AdministratorSettingDataType administratorSettingDataType, Type enumerationType = null)
{
DataType = administratorSettingDataType;
EnumerationType = enumerationType;
}
...导致编译时错误: "属性参数必须是属性参数类型的常量表达式、typeof 表达式或数组创建表达式"。
最佳答案
更新
该错误于去年 7 月报告,现已修复。该修复程序将出现在下一版本的 C# 中。有关详细信息,请参阅此连接反馈项目:
这显然是一个编译器错误。感谢您提请我注意。
这里应该发生的是,编译器应该意识到可选值表达式被隐式转换为形式参数类型,然后将表达式视为该类型的常量表达式。它实际做的是将表达式视为无类型空文字,这是错误的。
您可以通过将常量转换为明确类型的常量来解决该错误:
public AdministratorSettingValidationAttribute(AdministratorSettingDataType administratorSettingDataType, Type enumerationType = (Type)null)
修复可能很简单,但我不能保证会在下一版本的 C# 中修复;我不确定此时进行非关键错误修复的时间表是怎样的。
再次感谢,对于给您带来的不便,我们深表歉意。
关于c# - 在属性构造函数中使用可选参数时,属性参数必须是常量错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8290853/