使用非Const字符串作为CategoryAttribute名称

时间:2013-03-21 16:19:07

标签: c# properties resources attributes const

所有,我正在本地化我的C#应用​​程序,我已经来到我的设置控制。当我使用PropertyGrid时,我正在使用属性来提供选项。我有一个CategoryAttribute用于“服务器访问”我需要用不同的语言显示 - 我有:

[CategoryAttribute("ServerAccess"),
 ReadOnlyAttribute(false),
 XmlElement,
 DescriptionAttribute("Message about the Server Access Option.")]
public bool ShowSystemDatabases 
{
    get { return this.showSystemDatabases; }
    set { this.showSystemDatabases = value; }
}

我尝试将其更改为:

[CategoryAttribute(ObjectStrings.SettingsServerAccess),
 ReadOnlyAttribute(false),
 XmlElement,
 DescriptionAttribute(MessageStrings.SettingsShowSystemDatabaseInfo)]
public bool ShowSystemDatabases 
{
    get { return this.showSystemDatabases; }
    set { this.showSystemDatabases = value; }
}

ObjectStrings是我的资源文件('ObjectStrings.resx'等)。这会引发编译时错误

An attribute argument must be a constant expression, typeof expression or array 
creation expression of an attribute parameter type...

很明显,当构造函数期望const string时,我不能使用字符串。我尝试使用各种圆形方法从string投射到const string,但都失败了。这是一个简单的问题,但是......

解决此问题的最简单方法是什么?

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

我不知道如何处理这个问题,特别是在控件属性的情况下,但实现这一点的一般方法是在运行时使用类似参数的资源解析资源:

MessageResourceType = typeof (MyResource), MessageResourceName = "MyResourceKey")

而不是将指针传递给资源键。

我不知道对于CategoryAttribute,DescriptionAttribute和其他Controls的属性属性是否存在等效方式,或者是否有重载方法。