2016-09-07 157 views
1

我使用默认参数,但我发现错误错误声明默认参数方法

默认参数值的“正则表达式”必须是一个编译时 常数

这里是方法签名:

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\._%\+\-][email protected]([A-Za-z0-9\-]{1,40}\.)+([A-Za-z0-9]{2,4}|museum)$"; 
      return emailAddressRegex; 
     } 
} 

回答

4

这就像错误信息所述。默认参数必须是常量(在编译时)。

EmailAddressRegex的Getter可能会在运行时返回不同的值。这总是相同的值,编译器不知道。

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

E.g.

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

可选参数的缺省值必须是编译时常量。

在你的情况下,解决方法是:

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

这里更多的细节.. MSDN

+0

@Steve ....是....我错过了它..感谢确认 – Moumit