可能是重复问题:
C#语言中变量名中@符号的用途和意义是什么?
我在几个地方看到过,包括Resharper转换的代码...
SomeClass @object = new SomeClass( ... );
我原以为它是匿名的,但我想我错了。
这句话真的有意义吗?
可能是重复问题:
C#语言中变量名中@符号的用途和意义是什么?
我在几个地方看到过,包括Resharper转换的代码...
SomeClass @object = new SomeClass( ... );
我原以为它是匿名的,但我想我错了。
这句话真的有意义吗?
前缀“@”允许使用关键字作为标识符,这在与其他编程语言进行接口时非常有用。字符“@”实际上不是标识符的一部分,因此,在其他语言中,该标识符可能被视为普通标识符而没有前缀。带有@前缀的标识符称为逐字标识符。
示例:
class @class
{
public static void @static(bool @bool) {
if (@bool)
System.Console.WriteLine("true");
else
System.Console.WriteLine("false");
}
}
参见:http://msdn.microsoft.com/en-us/library/aa664670.aspx
它允许您将保留关键字用作标识符。例如,我经常遇到的一个常见情况是在定义锁对象时使用。
object lock = new object(); // this would throw a compiler error as `lock` is a reserved word.
@
符号,告诉编译器这不是类型而是字面量。object @lock = new object();
顺便说一下,如果你的标识符描述不够详细,就会出现这样的冲突,这通常是一个很好的指示器。
它的意思是“字面”,即“这个名称不是关键字或类型标识符”。如果没有它,object
将被视为一种类型。
关键字是预定义的保留标识符,对编译器具有特殊含义。除非它们包括@
作为前缀,否则不能在程序中用作标识符。例如,@if
是一个合法的标识符,但 if 不是因为它是一个关键字。
请参考C# 关键字。