我想在实体上使用StringLength属性,而不是使用文字或常量来使用静态属性。
e.g
[StringLength(MyClass.MyStaticProperty)]
public string Code { get; set; }
然而,这会导致以下错误......
属性参数必须是常量表达式,typeof表达式 或属性参数类型
的数组创建表达式
...除了使用字符串文字或常量之外,还有其他任何人可以解决这个问题吗?
如果你想知道为什么是静态属性? static属性将从注入的单例中返回一个值。该值将在应用程序启动时注入。
谢谢......圣诞快乐......
答案 0 :(得分:3)
创建自己的属性可能是最好的解决方案。然后,您还可以控制以后可能要实现的任何其他逻辑。
public class CustomStringLength: ValidationAttribute
{
public CustomStringLength()
{
}
public override bool IsValid(object value)
{
return (string)value.Length == MyClass.MyStaticProperty;
}
}
考虑MyClass.MyStaticProperty
是int
。
用法:
[CustomStringLength]
public string Code { get; set; }
答案 1 :(得分:1)
StringLength
属性参数应在编译时中知道。
您可以指定确切的值或引用常量值:
public static class MyClass
{
public const int MyStaticProperty = 5;
}
[StringLength(MyClass.MyStaticProperty)]
public string Code { get; set; }
请注意,没有static
个关键字,因为const
暗示static
。