C# “\[…]”是有效的标识符吗?
我刚刚从Microsoft安装了.NET 4.5参考源代码,因为我正试图调试我看到的一个问题,我在C# “\[…]”是有效的标识符吗?,c#,asp.net,.net-4.5,httpapplication,C#,Asp.net,.net 4.5,Httpapplication,我刚刚从Microsoft安装了.NET 4.5参考源代码,因为我正试图调试我看到的一个问题,我在HttpApplication.cs中偶然发现了以下内容 // execution step -- call asynchronous event internal class AsyncEventExecutionStep : IExecutionStep { private HttpApplication _application; private BeginEvent
HttpApplication.cs
中偶然发现了以下内容
// execution step -- call asynchronous event
internal class AsyncEventExecutionStep : IExecutionStep {
private HttpApplication _application;
private BeginEventHandler _beginHandler;
private EndEventHandler _endHandler;
private Object _state;
private AsyncCallback _completionCallback;
private AsyncStepCompletionInfo _asyncStepCompletionInfo; // per call
private bool _[....]; // per call
private string _targetTypeStr;
注意最后一行的下一行private bool[..];/每次通话
\uu[..]
是有效标识符(在任何编译级别,包括IL)还是编译后源代码已更改?否;那是无效的
在发布源代码之前,微软使用了一个写得很差的内部工具,将所有员工姓名替换为[…]
不幸的是,该工具也替换了实际的源代码 这实际上适得其反;通过查看编译后的元数据(例如,在Reflector中),您可以发现大部分隐藏源实际上是什么
您的特定行应该是
private bool\u sync
虽然@SLaks answer很可能是正确的,但需要注意的是,这是IL级别的潜在有效标识符,ECMA 335 Partition II第5.3节规定:
[T] ILAsm语法允许使用任何可以使用Unicode字符集形成的标识符(参见分区I)。为了实现这一点,标识符应放在单引号内
以下是在控制台上打印为False的完全有效的IL:
.assembly 'ValidIDTest'
{
}
.class public TestClass
{
.field static public bool '_[...]'
.method static void Main() cil managed
{
.entrypoint
ldsfld bool TestClass::'_[...]'
call void [mscorlib]System.Console::WriteLine(bool)
ret
}
}
显然不是,或者你没有试过编译它吗?编译器假定它是无效的数组声明。您无法编译它,因为引用源未附带解决方案文件。我很确定它在用户land C#中不是一个有效的标识符,但我知道编译器会生成你或我无法在Visual Studio中编写的类名等,因此会询问它在任何编译级别(包括IL)上是否有效。@Bobson MS会对引用源进行一些清理,主要与注释有关。我猜他们的清洁器“清理”得太多了。@GregB因为引用源不是反编译器的输出,所以IL中的相关内容对它来说并不重要。你的意思是,John Foo在MS?开始工作后,代码就不可读了@igrimpe:我相信它只对用户名起作用……所以某人的用户名是
\u sync
?这里希望没有人接受int
或System
。@JacobAbrahams:no;只需同步
。(未删除。
)。而且,是的。@igrimpe似乎是相关的。@SLak的答案是正确的。这个问题在so上至少出现过两次,并且至少有一次被一位能够使用该工具的微软员工回答过,但我太懒了,没法找到他们。