首页 > 解决方案 > “MyCountry”类型中不存在类型名称“GetName”

问题描述

我创建了一个新的类库。

添加一个名为 MyCountry.resx 的新 resx 文件并向其中添加一些资源。

名称和值的两个条目。我将访问修饰符设置为公共,这样我就可以引用这个类并在其他项目中使用它。

我创建了另一个新的类库并引用了上面的 CL,当我编写以下代码时,一切似乎都运行良好:

var someValue = ClassLibrary.MyCountry.GetName;

然后我决定更改同一类声明的属性以使用相同的资源条目。工作属性示例(为清楚起见而缩短)

[Tree("SomethingHere", "SomethingThere")]

这有效,但是当我将其更改为

[Tree(ClassLibrary.MyCountry.GetName, "SomethingThere")]

我收到错误

属性参数必须是属性参数类型的常量表达式、typeof 表达式或数组创建表达式

所以改成

[Tree(typeof(ClassLibrary.MyCountry.GetName), "SomethingThere")]

但后来我收到

“MyCountry”类型中不存在类型名称“GetName”

当我知道它在上面显示的代码上工作时。

是否可以让属性以我展示的方式使用 resx CL 中的值,我是否遗漏了某些东西或者不可能?

标签: c#.net

解决方案


正如编译器在警告中指出的那样。它需要一个在编译时已知的值,但.resx文件的值是在运行时加载的。

您可以在文件MyCountry.Designer.cs中自动创建的MyCountry.resx文件中查找。

我想到了针对您的问题的 2 个解决方案:

  1. 您创建一个class包含所有常量的。
public class MyCountry
{
    public const string GetName = "Lorem Ipsum";
}
  1. 您创建/使用一个源生成器,它从中创建这样一个类,.resx以便编译器可以在编译时访问它。

推荐阅读