在C#variables名称前放置@会做什么?

我一直在使用一些C#遗留代码,并且在variables名前面看到了许多@符号。 这是什么意思呢?

目前我在variables前面看到很多不常用的常用名字。 例如:

MyProcedure(@step.LoadInstanceId, @step.ResultCode, @step.StatusCode); 

鉴于这一步不是一个保留字,是否有任何理由逃脱?

这只是一种允许将保留关键字声明为variables的方法。

 void Foo(int @string) 

它允许你使用保留字,比如“public”作为variables名。

 string @public = "foo"; 

我不会推荐这个,因为这会导致不必要的混淆。

将@放在string的前面告诉计算机不要处理在string中find的转义序列。

从文档 :

@ -quoting的优点是不会处理转义序列,这使得编写一个完全合格的文件名变得容易:

 @"c:\Docs\Source\a.txt" // rather than "c:\\Docs\\Source\\a.txt" 

要在@引用的string中包含双引号,请将其加倍:

 @"""Ahoy!"" cried the captain." // "Ahoy!" cried the captain. 

@符号的另一个用途是使用碰巧是C#关键字的引用(/引用)标识符。 有关更多信息,请参阅2.4.2标识符 。

这逃避了C#中的保留字。

原来的问题是为什么要逃避一个不被保留的词。 我想到的是,如果将来step将成为保留字,代码示例仍然会编译。 我想这也是代码生成器的有效选项。

@符号与语言关键字相同的标识符一起使用。 这有两个主要用途 – 与非C#代码互操作。 在像VB或IronPython这样的语言中,关键字与C#中的关键字不一样,它们可能已经声明了名称与C#关键字匹配的类和属性。 如果此function不存在,则此代码将无法在C#中访问。 – 机器生成的代码。 如果代码生成器基于某些外部源(例如WSDL)生成代码,则生成器可以仅使用@作为所有标识符的前缀,而不检查和转换与C#关键字匹配的标识符。

你确定你的情况不是第二?