设置C#可选参数的默认值
每当我尝试将可选参数的默认值设置为资源文件中的某些内容时,我会得到编译时错误
‘message’的默认参数值必须是编译时常量。
有什么办法可以改变资源文件的工作方式来实现这个目标吗?
public void ValidationError(string fieldName, string message = ValidationMessages.ContactNotFound)
在此, ValidationMessages
是一个资源文件。
不,您将无法直接在默认情况下使资源工作。 您需要做的是将默认值设置为null,然后在参数在方法体中具有默认值时执行资源查找。
一种选择是将默认值设为null
,然后适当填充:
public void ValidationError(string fieldName, string message = null) { string realMessage = message ?? ValidationMessages.ContactNotFound; ... }
当然,这仅在您不希望将null
作为真值时才有效。
另一个可能的选择是进行预构建步骤,根据资源创建一个充满const
字符串的文件; 然后你可以引用那些consts。 但这会很尴尬。
另一个选择是将方法拆分为两个,并让一个重载调用另一个,如下所示:
public void ValidationError(string fieldName) { ValidationError(fieldName, ValidationMessages.ContactNotFound); } public void ValidationError(string fieldName, string message) { ... }
这种方式还允许您将null
作为message
的值message
,以防它也是该参数的有效值。
- 即使用户具有管理权限,App也无法写入注册表
- Json.NET + VerificationException操作可能会破坏运行时的稳定性
- 哈希函数.NET
- 让WPF应用程序忽略DPI设置
- DirectoryInfo.EnumerateFiles(…)导致UnauthorizedAccessException(和其他exception)
- 无法从程序集’itextsharp,Version = 5.5.5.0,Culture = neutral,PublicKeyToken = 8354ae6d2174ddca’加载类型’iTextSharp.text.html.HtmlParser’
- Foreach循环通过文本框的控件不会返回
- 以编程方式创建包含webpart的webpart页面
- 如何使用角色或组合在NHibernate中映射类