为方法声明默认参数时出错

Error in declaring default parameters for method

我正在使用默认参数,但出现错误

Default parameter value for 'regularExpression' must be a compile time constant

这里是方法签名:

public static PIPE.DataTypes.BuyFlow.Entities.Question GetEmailAddressQuestion(string regularExpression = RegularExpressions.EmailAddressRegex, int rank = 1, bool isRequired = true)
{
}

这里是 属性:

public static string EmailAddressRegex
{
    get {
            string emailAddressRegex = @"^[A-Za-z0-9\._%\+\-]+@([A-Za-z0-9\-]{1,40}\.)+([A-Za-z0-9]{2,4}|museum)$";
            return emailAddressRegex;
        }
}

就像错误信息所说的那样。默认参数必须是常量(在编译时)。

EmailAddressRegex 的 Getter 在运行时可以 return 不同的值。编译器不知道这始终是相同的值。

因此将 EmailAddressRegex 更改为 const string 编译器错误将消失。

例如

public const string EmailAddressRegex = @"^[A-Za-z0-9\._%\+\-]+@([A-Za-z0-9\-]{1,40}\.)+([A-Za-z0-9]{2,4}|museum)$";

可选参数的默认值必须是编译时常量。

对于您的情况,解决方法是:

public const string EmailAddressRegex = @"^[A-Za-z0-9\._%\+\-]+@([A-Za-z0-9\-]{1,40}\.)+([A-Za-z0-9]{2,4}|museum)$";                 

这里有更多详细信息.. MSDN