是否可以为属性指定可变文本
本文关键字:文本 属性 是否 | 更新日期: 2023-09-27 18:28:02
我有一个带有可选错误文本的属性,如下所示:
[DoubleRangeCheck(2.0, 10.0, ErrorMessage="Text shown on error")]
现在我想定位错误消息,所以我尝试了
[DoubleRangeCheck(2.0, 10.0, ErrorMessage=Properties.Resources.MsgLocalisedError)]
但是我得到一个编译器错误,指出属性必须是常量。
error CS0182: An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type
所以这是不可能的,还是我错过了什么?
如何将文本参数本地化为属性?
编译器状态下的属性只能用常数值表示——它们本质上是序列化并存储在元数据中。然而,通常可以通过对它们进行子类化来对它们进行本地化,并让子类覆盖为此目的公开的一些虚拟方法。例如,使用[Category("Foo")]
,您可以执行以下操作:
class LocalizedCategoryAttribute : CategoryAttribute {
public LocalizedCategoryAttribute(string category) : base(category) { }
protected override string GetLocalizedString(string value)
{
// your code here! (treat "value" as the key)
return base.GetLocalizedString(value);
}
}
然后用CCD_ 2装饰。这项工作的效果取决于特定的属性和使用它们的代码。