What does placing a @ in front of a C# variable name do?
本问题已经有最佳答案,请猛点这里访问。
我一直在使用一些C遗留代码,在变量名前面看到了很多@符号。这意味着什么或做什么?
目前,我经常看到它出现在通用名不被保留的变量前面。例如。:
1 | MyProcedure(@step.LoadInstanceId, @step.ResultCode, @step.StatusCode); |
考虑到这一步不是一个保留字,有什么理由让他们逃走吗?
这只是一种允许将保留关键字声明为var的方法。
1 | void Foo(int @string) |
它允许您使用保留字,例如"public",作为变量名。
1 | string @public ="foo"; |
我不建议这样做,因为这会导致不必要的混乱。
将@放在字符串前面会告诉计算机不要处理字符串中找到的转义序列。
从文档中:
@-引号的优点是不处理转义序列,这使得写入完全限定的文件名变得容易,例如:
1 | @"c:\Docs\Source\a.txt" // rather than"c:\\Docs\\Source\\a.txt" |
要在@引号字符串中包含双引号,请将其加倍:
1 | @"""Ahoy!"" cried the captain." //"Ahoy!" cried the captain. |
@符号的另一个用法是使用引用的(/reference)标识符,这些标识符恰好是C关键字。有关更多信息,请参见2.4.2标识符。
这会避开c中的保留字。
最初的问题问一个为什么人们会避开一个非保留字的原因。我想到的是,如果
@符号与与语言关键字相同的标识符一起使用。这有两个主要用途-与非C代码进行互操作。在诸如vb或ironpython之类的语言中,关键字与c中的关键字不同,它们可能声明了名称与c关键字匹配的类和属性。如果不存在此功能,则无法在C中访问此代码。-机器生成的代码。如果代码生成器基于某个外部源(例如WSDL)生成代码,则生成器只能在所有标识符前加上@前缀,而不能检查和转换与C关键字匹配的标识符。
你确定你的案子不是第二个吗?