是否可以为属性指定可变文本

本文关键字:文本 属性 是否 | 更新日期: 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装饰。这项工作的效果取决于特定的属性和使用它们的代码。