如何解决此"资源名称不是有效标识符"编译器警告

Kev*_*vin 9 c# resources compiler-warnings

我在Visual Studio 2005项目中有一堆警告,其中大多数警告我资源名称不是有效的标识符.

例:

The resource name 'MB_ArchiveRestore.cs_11' is not a valid identifier.
Run Code Online (Sandbox Code Playgroud)

MSDN联机帮助表明资源名称需要强类型,不包含空格.强类型的确切含义是什么?

Mar*_*rek 9

根据您在问题中发布的链接,我认为您可能会询问strongly typed resource generation- 这意味着Visual Studio将生成一个资源文件,允许您通过类型属性访问资源,例如

string fileName = Resources.FileName;
bool someSetting = Resources.AllowDelete;
byte[] binaryResource = Resources.SomeFile;
Run Code Online (Sandbox Code Playgroud)

与非类型化资源相反,您必须自己转换返回值,因为它返回System.Object类型而不是特定类型.

string fileName = (string)Resources["FileName"];
bool someSetting = (bool)Resources["AllowDelete"];
byte[] binaryResource = (byte[])Resources["SomeFile"]
Run Code Online (Sandbox Code Playgroud)


Dan*_*ner 9

强类型意味着变量,字段或属性属于特定类型而不仅仅是Object.

public class User
{
    public String FirstName { get; set; } // Strongly typed
    public Object LastName { get; set; } // Weakly typed
}
Run Code Online (Sandbox Code Playgroud)

如果使用强类型资源,则会为所有资源生成具有强类型属性的代码.在这种情况下,资源名称用作属性名称,因此它必须是有效的C#属性名称.您的示例MB_ArchiveRestore.cs_11包含一个点,因此不是有效的属性名称.代码生成器将使用下划线替换点以使名称有效,并为您提供所描述的警告以通知您.


Joh*_*lla 7

出现此问题的原因.是标识符中不是有效字符.

强类型的确切含义是什么?

虽然它与这个特定问题不相关,但"强类型"意味着一个对象具有明确的类型概念.例如,您不能int i = "5";在C#中执行,因为"5"是一个字符串并且i是一个整数 - 它们的类型彼此不兼容.

这与"弱类型"语言形成鲜明对比,"类型"的概念并不那么强烈.弱类型语言可能会决定对于类似的东西i = 5; j = "6"; print (i + j);,正确的响应是11.