ChatGPT解决这个技术问题 Extra ChatGPT

What does the @ symbol before a variable name mean in C#? [duplicate]

This question already has answers here: Closed 11 years ago.

Possible Duplicate: What's the use/meaning of the @ character in variable names in C#?

I understand that the @ symbol can be used before a string literal to change how the compiler parses the string. But what does it mean when a variable name is prefixed with the @ symbol?


M
Michael Meadows

The @ symbol allows you to use reserved word. For example:

int @class = 15;

The above works, when the below wouldn't:

int class = 15;

With what is it any different than, say, an underscore?
With an @ symbol, the name is recorded in the assembly as "class", vs. with an underscore it is "_class". Thus, if another .NET language doesn't define "class" as a reserved word, they could use the name just "class".
If you used @class for a property name, you could access it like so: MyClass.class instead of MyClass._class
Just when you think you know everything there is to know about C#, you learn something new. :)
@Vilx- In ASP.net MVC it's very common to use it because that's the only way to express some things. For example if you want to set an element's class attribute you'd type new { @class = "mc" }; even tho you meant just "class", that's the only way. The point I'm trying to make is that the @ is not part of the actual name of the variable.
w
ww1711

The @ symbol serves 2 purposes in C#:

Firstly, it allows you to use a reserved keyword as a variable like this:

int @int = 15;

The second option lets you specify a string without having to escape any characters. For instance the '\' character is an escape character so typically you would need to do this:

var myString = "c:\\myfolder\\myfile.txt"

alternatively you can do this:

var myString = @"c:\myFolder\myfile.txt"

How it affects strings was exactly what I was looking for. Thanks!
Thank you, the usage of @ for strings was exactly what I was looking for
You still need to escape double quotes by doubling them.
This is the better answer IMO
@CyberneticTwerkGuruOrc While this is a more detailed answer it goes beyond what the OP asked, the marked answer addresses the specific issue of the @ when used with variables and is therefore (IMO) the more correct answer.
R
Rasmus Faber

An important point that the other answers forgot, is that "@keyword" is compiled into "keyword" in the CIL.

So if you have a framework that was made in, say, F#, which requires you to define a class with a property named "class", you can actually do it.

It is not that useful in practice, but not having it would prevent C# from some forms of language interop.

I usually see it used not for interop, but to avoid the keyword restrictions (usually on local variable names, where this is the only effect) ie.

private void Foo(){
   int @this = 2;
}

but I would strongly discourage that! Just find another name, even if the 'best' name for the variable is one of the reserved names.


That's probably good advice. I think that the @ qualifier is the equivalent of VB.Net's square bracket, so the VB equivalent would be: dim [Class] as Int32 = 15
@Michael It is exactly the equivalent of VB.NET's square bracket syntax. stackoverflow.com/questions/6639688/… notes that F# uses double backticks around an identifier for the same purpose.
As a late comment - "not that it is THAT useful" - in MVC that is the way you can pass forward a property named "class" to the render e - which turns into html "class" to define the CSS class.
J
Joel Coehoorn

It allows you to use a C# keyword as a variable. For example:

class MyClass
{
   public string name { get; set; }
   public string @class { get; set; }
}