Curiosidades C# – Definindo identificador textual (Verbatim Strings)

O caractere especial ‘@‘ serve como um identificador textual

Quando você prefixa uma string literal com o símbolo @, você cria o que é chamado de string literal. Usando strings literais, você desativa o processamento dos caracteres de escape e imprime a sequência exatamente como está.

Isso pode ser mais útil ao trabalhar com strings que representam caminhos de diretório e rede. Portanto, em vez de usar caracteres de escape ‘\\’ basta usar o identificador.

Exemplo:

// => Without the @ this will produce a "unrecognized escape sequence" error.
var path = @"C:\Program Files\IIS Express\AppServer\empty_wwwroot\";
Console.WriteLine(path);

// => The string can also be like
var path2 = "C:\\Program Files\\IIS Express\\AppServer\\empty_wwwroot\\";
Console.WriteLine(path2);
/*
Both produce the same string at the console

C:\Program Files\IIS Express\AppServer\empty_wwwroot\
C:\Program Files\IIS Express\AppServer\empty_wwwroot\
*/

Observe também que o identificador ‘@’ pode ser usado para preservar espaço em branco em string que contem diversas linhas.

Exemplo:

string thatsLife = @"That's life (that's life), 
        that's what all the people say
        You're ridin' high in April, 
        shot down in May";
Console.WriteLine(thatsLife);

/* This will print the following
That's life (that's life),
                    that's what all the people say
                    You're ridin' high in April,
                    shot down in May
*/

Você também pode inserir diretamente umas aspas duplas em uma cadeia literal, para isso basta duplicar as aspas “”.

Exemplo:

var doubleQuote = @"This is a new ""Hello World!"" Sample ";
Console.WriteLine(doubleQuote);

/* This will print
This is a new "Hello World!" Sample
*/

O exemplo a seguir ilustra o efeito de definir uma string comum, e outra usando o identificador textual. Note que ambas contêm sequências de caracteres idênticas.

Exemplo:

var sinatra1 = "Sinatra - \"Don't hide your scars. They make you who you are\x0021\"";
var sinatra2 = @"Sinatra - ""Don't hide your scars. They make you who you are\x0021""";
Console.WriteLine(sinatra1);
Console.WriteLine(sinatra2);

/* This will print
Sinatra - "Don't hide your scars. They make you who you are!"
Sinatra - "Don't hide your scars. They make you who you are\x0021"
*/

Exemplo completo para referência

using System;
namespace VerbatimStrings
{
    class Program
    {
        static void Main(string[] args)
        {
            var path = @"C:\Program Files\IIS Express\AppServer\empty_wwwroot\";
            Console.WriteLine(path);
            Console.WriteLine();

            var path2 = "C:\\Program Files\\IIS Express\\AppServer\\empty_wwwroot\\";
            Console.WriteLine(path2);
            Console.WriteLine();

            var thatsLife = @"That's life (that's life), 
                    that's what all the people say
                    You're ridin' high in April, 
                    shot down in May";
            Console.WriteLine(thatsLife);
            Console.WriteLine();

            var doubleQuote = @"This a new ""Hello World!"" Sample ";
            Console.WriteLine(doubleQuote);
            Console.WriteLine();

            var sinatra1 = "Sinatra - \"Don't hide your scars. They make you who you are\x0021\"";
            var sinatra2 = @"Sinatra - ""Don't hide your scars. They make you who you are\x0021""";
            Console.WriteLine(sinatra1);
            Console.WriteLine(sinatra2);
        }
    }
}

Qualquer dúvida ou dicas, entre em contato: leandrolt@gmail.com

Principais referências

– Livro: Pro C# 7: With .NET and .NET Core – Andrew Troelsen
– https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/tokens/verbatim
– https://stackoverflow.com/questions/3311988/what-is-the-difference-between-a-regular-string-and-a-verbatim-string

Leave a Reply

Your email address will not be published. Required fields are marked *