过去我以resources.User
为例使用了资源。虽然几周之后(可能是两者之间的更新?)我注意到即使这没有创建编译错误,但当我输入resources.
时我不再有自动完成。
因此,我现在使用:ResourcesDB2.ResourceManager.GetString("User")
作为示例来浏览资源管理器。
我开始怀疑:在没有资源管理器的情况下使用这种方法是否可行?或者现在可以采用这种方法了吗?
答案 0 :(得分:0)
通过将键作为字符串传递来引用资源可能会在重命名键时中断。
E.g。如果将资源User
重命名为UserLabel
,resources.User
将导致编译错误。但是ResourcesDB2.ResourceManager.GetString("User")
只会在运行时失败。
因此最好使用直接引用,即没有ResourceManager
的方法。
关于IntelliSense的问题:您似乎无法使用生成的静态ResourcesDB2.Designer.cs
类访问资源。请尝试ResourcesDB2.User
,而不是通过resources
变量。
如果您要查找的密钥是动态的,则可以使用ResourceManager
,例如
int weekDayNumber = 3; // 0 to 6
string weekDayName = ResourcesDB2.ResourceManager.GetString("WeekDay_" + weekDayNumber); // "Tuesday"
资源文件中的密钥"WeekDay_0"
到"WeekDay_6"
。同样,如果有人重命名这些键,这将很容易破坏。此外,如果有人试图通过字符串搜索(例如搜索" WeekDay_0")来查找要重命名的密钥的用法,则无法找到此用法。
这样做会更加健壮:
switch (weekDayNumber) {
case 0: weekDayName = ResourcesDB2.WeekDay_0; break;
case 1: weekDayName = ResourcesDB2.WeekDay_1; break;
// ...
}