在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#关键字匹配的标识符。
你确定你的情况不是第二?