Events
Mar 17, 11 PM - Mar 21, 11 PM
Join the meetup series to build scalable AI solutions based on real-world use cases with fellow developers and experts.
Register nowThis browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
@
in variables, attributes, and string literalsThe @
special character serves as a verbatim identifier. You use it in the following ways:
To indicate that a string literal is to be interpreted verbatim. The @
character in this instance defines a verbatim string literal. Simple escape sequences (such as "\\"
for a backslash), hexadecimal escape sequences (such as "\x0041"
for an uppercase A), and Unicode escape sequences (such as "\u0041"
for an uppercase A) are interpreted literally. Only a quote escape sequence (""
) isn't interpreted literally; it produces one double quotation mark. Additionally, in case of a verbatim interpolated string brace escape sequences ({{
and }}
) aren't interpreted literally; they produce single brace characters. The following example defines two identical file paths, one by using a regular string literal and the other by using a verbatim string literal. This is one of the more common uses of verbatim string literals.
string filename1 = @"c:\documents\files\u0066.txt";
string filename2 = "c:\\documents\\files\\u0066.txt";
Console.WriteLine(filename1);
Console.WriteLine(filename2);
// The example displays the following output:
// c:\documents\files\u0066.txt
// c:\documents\files\u0066.txt
The following example illustrates the effect of defining a regular string literal and a verbatim string literal that contain identical character sequences.
string s1 = "He said, \"This is the last \u0063hance\x0021\"";
string s2 = @"He said, ""This is the last \u0063hance\x0021""";
Console.WriteLine(s1);
Console.WriteLine(s2);
// The example displays the following output:
// He said, "This is the last chance!"
// He said, "This is the last \u0063hance\x0021"
To use C# keywords as identifiers. The @
character prefixes a code element that the compiler is to interpret as an identifier rather than a C# keyword. The following example uses the @
character to define an identifier named for
that it uses in a for
loop.
string[] @for = { "John", "James", "Joan", "Jamie" };
for (int ctr = 0; ctr < @for.Length; ctr++)
{
Console.WriteLine($"Here is your gift, {@for[ctr]}!");
}
// The example displays the following output:
// Here is your gift, John!
// Here is your gift, James!
// Here is your gift, Joan!
// Here is your gift, Jamie!
To enable the compiler to distinguish between attributes in cases of a naming conflict. An attribute is a class that derives from Attribute. Its type name typically includes the suffix Attribute, although the compiler doesn't enforce this convention. The attribute can then be referenced in code either by its full type name (for example, [InfoAttribute]
or its shortened name (for example, [Info]
). However, a naming conflict occurs if two shortened attribute type names are identical, and one type name includes the Attribute suffix but the other doesn't. For example, the following code fails to compile because the compiler can't determine whether the Info
or InfoAttribute
attribute is applied to the Example
class. For more information, see CS1614.
using System;
[AttributeUsage(AttributeTargets.Class)]
public class Info : Attribute
{
private string information;
public Info(string info)
{
information = info;
}
}
[AttributeUsage(AttributeTargets.Method)]
public class InfoAttribute : Attribute
{
private string information;
public InfoAttribute(string info)
{
information = info;
}
}
[Info("A simple executable.")] // Generates compiler error CS1614. Ambiguous Info and InfoAttribute.
// Prepend '@' to select 'Info' ([@Info("A simple executable.")]). Specify the full name 'InfoAttribute' to select it.
public class Example
{
[InfoAttribute("The entry point.")]
public static void Main()
{
}
}
.NET feedback
.NET is an open source project. Select a link to provide feedback:
Events
Mar 17, 11 PM - Mar 21, 11 PM
Join the meetup series to build scalable AI solutions based on real-world use cases with fellow developers and experts.
Register now