In C#, a verbatim string is created using a special symbol @. The symbol(@) is known as a verbatim identifier. If a string contains @ as a prefix followed by double quotes, then compiler identifies that string as a verbatim string and compiles that string.
The main advantage of @ symbol is to tell the string constructor to ignore escape characters and line breaks.
Syntax:
string str = @" string content ";Key Features of Verbatim String
- No Escape Sequences: Backslashes (\) are treated as literal characters and do not require escape sequences.
- Useful for file paths
- Readable multi-line strings: Allows for strings to span multiple lines.
Example:
using System;
public class Geeks
{
static public void Main ()
{
// using for file path
string str = @"C:\Users";
Console.WriteLine("File Path: " + str);
// using double quotes
string str2 = @"Hello ""Geeks"" ";
Console.WriteLine("Using Double Quotes: " + str2);
// using multi line
string str3 = @"
This is
multi line
String";
Console.WriteLine("Multi Line: "+str3);
}
}
Output
File Path: C:\Users
Using Double Quotes: Hello "Geeks"
Multi Line:
This is
multi line
String
Types of Verbatim String Literal
There are mainly two uses of the @ symbol:
- Verbatim String Identifier
- Verbatim String Literal
1. Verbatim String Identifier
This symbol allows using a keyword as an identifier. The @ symbol prefixes the keyword, so the compiler takes keyword as an identifier without any error as shown in the below example:
Example:Â
using System;
public class GFG
{
// Main method
static public void Main()
{
// Creating and initializing the array
// here 'for' keyword is used as
// an identifier by using @ symbol
string[] @for = {"C#", "PHP", "Java", "Python"};
// as and for keywords is
// as an identifier
// using @ symbol
foreach (string @as in @for) {
Console.WriteLine("Element of Array: {0}", @as);
}
}
}
Output
Element of Array: C# Element of Array: PHP Element of Array: Java Element of Array: Python
2. Verbatim String Literal
For printing the escape sequences in string literals and also using the line breaks etc. in a string literal without any escape sequence.
If one will put the escape sequence like "\\" (for backslash), "\u" (Unicode escape sequence), "\x" (hexadecimal escape sequence) etc. in a string literal without using @ symbol then these sequences will be interpreted by compiler automatically. In verbatim strings, double quotes are represented using two consecutive double quotes (""). It is different from string interpolation. Verbatim strings treat escape sequences as literal text.
Example:
using System;
public class Geeks
{
static public void Main ()
{
// Verbatim String Literal
string str = @"This is \n a verbatim string";
Console.WriteLine(str);
}
}
Output
This is \n a verbatim string
Use Cases with Example
Let's see different cases with and without @ symbol.
Case 1:
// taking a string literal and
// try to print double quotes
string str1 = """";
// printing output
// this will give compile
// time error as Unexpected
// symbol `'
Console.WriteLine(str1);
In the above program, the double quotes inside double quotes as a string literal are interpreted as a single quotation mark.
Case 2:
// taking a string literal prefixes
// with @ and try to print double quotes
string str1 = @"""";
// printing output
// this will output as "
Console.WriteLine(str1);
In the above program, the output is double quote(") not ""
Case 3:
// taking a string in which we are storing
// some location of file but \Testing will
// interpreted as escape sequence \T
// similarly \N
string str1 = "\\C:\Testing\New\Target";
// printing str1
// this will give compile time error as
// Unrecognized escape sequence `\T'
// Unrecognized escape sequence `\N'
// Unrecognized escape sequence `\T'
Console.WriteLine(str1);
Case 4:
// taking a string and prefix literal with @ symbol.
// Storing some location of file
string str1 = @"\\C:\Testing\New\Target";
// printing str1 will give output as
// \\C:\Testing\New\Target
Console.WriteLine(str1);
Program:Â
using System;
public class GFG {
// Main method
static public void Main()
{
// If you use the below commented
// the part then this will give
// Unrecognized escape sequence error
// string S1 = "\\welcome \to GeeksforGeeks \ portal \";
// Console.WriteLine("String 1 is :{0}", S1);
// By using @ in the given string
// it runs smoothly because
// @ symbol tells the compiler to
// ignore all escape sequences
string S2 = @"\\welcome \to GeeksforGeeks \ portal \";
Console.WriteLine("String 2 is: {0}", S2);
// printing new line character in string literal
// but it will make the string to break
// into a new line, see output
string S3 = "This is \n C# non verbatim string";
Console.WriteLine("String 3 is :{0}", S3);
// By using @ symbol /n does not processed
string S4 = @"This is \n C# verbatim string";
Console.WriteLine("String 4 is :{0}", S4);
// printing a string literal contains
// tabs and new line without using
// any escape sequence
Console.WriteLine(@"Without Tab Sequence and New Line Character
C C++ Java Python");
}
}
Output
String 2 is: \\welcome \to GeeksforGeeks \ portal \
String 3 is :This is
C# non verbatim string
String 4 is :This is \n C# verbatim string
Without Tab Sequence and New Line Character
C C++ Java Python