Take the 2-minute tour ×

This question already has an answer here:

I've been working with some C# legacy code and I've been seeing a lot of @ symbols in front of variable names. What does this signify or do?

Currently I'm seeing it a lot in front of variables with common names that aren't reserved. E.g.:

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

Given that step isn't a reserved word, is there any reason that they should be escaped?

share|improve this question

marked as duplicate by Pierre-Luc Pineault, sethvargo, Joe, Ian, Kevin Brown Feb 17 at 17:21


show us some examples. Are they reserved words like @public or just variable names like @weddingDate? –  kloucks Oct 31 '08 at 19:47

6 Answers 6

up vote 94 down vote accepted

It's just a way to allow declaring reserved keywords as vars.

void Foo(int @string)
share|improve this answer
That makes sense, but can you think of any reason why people would be putting them in front of non-keyword variable names -- other than the original developer being stupid? –  Orion Adrian Oct 31 '08 at 19:37
My guess is that the previous coder didn't know how they worked. –  Orion Adrian Oct 31 '08 at 19:42
Maybe he came from a VB background where Step really IS a keyword. –  John Rudy Oct 31 '08 at 19:59
No sane coder under normal circumstances. What are some bizzare circumstances? When auto-generating code based on some ruleset, and not wanting to have a special case for reserved words. –  ripper234 Jul 7 '09 at 22:03
Interestingly, you don't need to use the @ can be omitted when using the variable. int @foo = 3; Console.WriteLine(foo); int bar = 4; Console.WriteLine(@bar); –  Richard Astbury May 6 '11 at 13:01

It allows you to use a reserved word, like 'public' for example, as a variable name.

string @public = "foo";

I would not recommend this, as it can lead to unecessary confusion.

share|improve this answer

Putting @ in front of a string tells the compuler not to process escape sequences found within the string.

From the documentation:





Another use of the @ symbol is to use referenced (/reference) identifiers that happen to be C# keywords. For more information, see 2.4.2 Identifiers.

share|improve this answer
Variables, not string literals. –  Orion Adrian Oct 31 '08 at 19:41
@Orion: yes it's also explained at the end ;-) –  Jmix90 Apr 28 '11 at 10:27
Once the string is in a variable it has already been escaped as it has to be parsed in order to be assigned to a variable so adding an @ to a string variable is not the same as adding it to a string literal. –  Jonathan Parker Aug 11 at 1:07

This escapes reserved words in C#.

share|improve this answer

The original question asks for a reason why one would escape a not-reserved word. What comes to my mind is that if step would become a reserved word in future the code example would still compile. I guess it is also a valid option for code generators.

share|improve this answer

The @ sign is used with identifiers that are the same as language keywords. There are two main uses for this - interoperating with non-C# code. In languages like VB or IronPython the keywords are not the same as in C# and they may have declared classes and properties with names that match C# keywords. If this feature was not present this code would not be accessible in C#. - machine generated code. If a code generator generates code based on some external source (for example WSDL) the generator can just prefix all identifiers with @ and not check and convert identifiers that match C# keywords.

Are you sure that your case is not the second?

share|improve this answer
