C# 如何在modelview中为验证属性构建常量字符串?

C# 如何在modelview中为验证属性构建常量字符串?,c#,.net,string,constants,C#,.net,String,Constants,我想用数据库中的默认值构建一个常量字符串 因此,当我这样做时: private const String nifInvalid = MensagensCacheManager.getMensagem( MensagensCacheManager.GetLanguage(), "empresa.nif.invalid"); 因此,我有以下错误: “无效”必须是常量 我可以使用静态只读,但我想将其用于自定义验证消息,例如: [RegularExpression(@

我想用数据库中的默认值构建一个常量字符串

因此,当我这样做时:

private const String nifInvalid = MensagensCacheManager.getMensagem(
        MensagensCacheManager.GetLanguage(), 
        "empresa.nif.invalid");
因此,我有以下错误:

“无效”必须是常量

我可以使用
静态只读
,但我想将其用于自定义验证消息,例如:

[RegularExpression(@"(^[0-9]+$)|(\d{8})([-]?)([A-Z]{1})", ErrorMessage=nifInvalid)]
public String nif { set; get; }

如何生成自定义验证并设置自定义验证消息?

在这种情况下不能使用常量,因为根据定义从数据库中获取值是在运行时进行的,所以不能谈论常量。常量是在编译时已知的东西。在您的情况下,您可以使用
静态只读
字段:

private static readonly string nifInvalid = MensagensCacheManager.getMensagem(MensagensCacheManager.GetLanguage(), "empresa.nif.invalid");

你不能<代码>常量s值应在编译时指定

发件人:

常量字段和局部变量不是变量,不能修改。 常量可以是数字、布尔值、字符串或空值 参考不要创建常量来表示您需要的信息 期待随时改变

常量声明的类型指定成员的类型 《宣言》所介绍的。局部常数的初始值设定项 或者常量字段必须是可以 隐式转换为目标类型。常量表达式是一个 可在编译时完全计算的表达式。因此, 引用类型常量的唯一可能值是字符串和 空引用

Darin在他的文章中提到了一个变通方法,但你现在应该这样做


如果您想让属性具有动态值,那么您可以使用它。

当然可以,但我想将此字符串用于:[RegularExpression(@“(^[0-9]+$)|(\d{8})([-]?)([A-Z]{1})”,ErrorMessage=nifInvalid)]公共字符串nif{set;get;},并且对于此字符串,它必须是常量。有什么帮助吗?那为什么这些如此重要的信息不是你问题的一部分?您不能这样做,因为根据定义,常量值必须在编译时已知。您必须编写自己的自定义属性才能实现此效果。这是针对ASP.NET MVC应用程序还是其他应用程序?如果你想让你的问题有意义,请提供相关信息。因此,现在请继续并通过提供所需的上下文来编辑您的问题。无论您打算将其用于什么用途,常量字符串不能在运行时计算,它必须是源代码中的常量文本,或者是仅涉及其他常量成员的表达式。使用所有信息进行编辑以扩展此正确答案;常量值在编译时替换为常量值,因此在任何情况下都不能在运行时派生,即使值在程序执行期间不会更改,也不允许从编译开始更改-因此从外部资源派生它是不可能或不可取的。我认为这与