gpt4 book ai didi

c# - 在属性构造函数中使用可选参数时,属性参数必须是常量错误

转载 作者:可可西里 更新时间:2023-11-01 02:59:41 28 4
gpt4 key购买 nike

谁能解释为什么这段代码有效:

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# 中。有关详细信息,请参阅此连接反馈项目:

http://connect.microsoft.com/VisualStudio/feedback/details/574497/optional-parameter-of-type-string-in-a-attribute-constructor-cannot-be-null


这显然是一个编译器错误。感谢您提请我注意。

这里应该发生的是,编译器应该意识到可选值表达式被隐式转换为形式参数类型,然后将表达式视为该类型的常量表达式。它实际做的是将表达式视为无类型空文字,这是错误的。

您可以通过将常量转换为明确类型的常量来解决该错误:

public AdministratorSettingValidationAttribute(AdministratorSettingDataType administratorSettingDataType, Type enumerationType = (Type)null) 

修复可能很简单,但我不能保证会在下一版本的 C# 中修复;我不确定此时进行非关键错误修复的时间表是怎样的。

再次感谢,对于给您带来的不便,我们深表歉意。

关于c# - 在属性构造函数中使用可选参数时,属性参数必须是常量错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8290853/

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