Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中,$在类或名称空间标识符之前和之后是什么意思?_C#_Identifier - Fatal编程技术网

在C#中,$在类或名称空间标识符之前和之后是什么意思?

在C#中,$在类或名称空间标识符之前和之后是什么意思?,c#,identifier,C#,Identifier,C#标识符规则规定名称必须以字母或下划线开头,但下面的代码不会出错。即使下面StackOverFlow上的代码显示函数也不认为以$开头或结尾的名称有效 namespace $safeprojectname$ { [ExportCodeRefactoringProvider(LanguageNames.CSharp, Name = nameof($saferootidentifiername$CodeRefactoringProvider)), Shared] internal c

C#标识符规则规定名称必须以字母或下划线开头,但下面的代码不会出错。即使下面StackOverFlow上的代码显示函数也不认为以$开头或结尾的名称有效

namespace $safeprojectname$
{
    [ExportCodeRefactoringProvider(LanguageNames.CSharp, Name = nameof($saferootidentifiername$CodeRefactoringProvider)), Shared]
    internal class $saferootidentifiername$CodeRefactoringProvider : CodeRefactoringProvider
    {
    }
}

刚刚意识到我正在查看一个生成C而不是C源文件的模板文件。

看起来像一个模板值Visual Studio在很多地方使用
$
替换模板中的变量,但这不是有效的C。你认为代码在哪里工作?是什么让你认为“工作无误”?它当然不适合我。。。你确定你真的在编译它吗?是否可能这实际上是一个通过预处理器运行的模板,但实际上不是C#?即使我伪造了属性和基类,我也会从该代码中得到不少于25个编译器错误,所以问题就解决了,但我想为将来发现这个问题的人提一提的另一个选项是:在IL中的名称中实际上有一些字符是允许的,但不是合法的C,例如
+
$
。C#编译器使用它们为泛型和匿名类型生成名称。例如,请参见本网站解释自动实现属性的过程:因此,如果您看到这些名称,您可能正在查找,例如,反编译的程序集。