4 votes

Quand est-il préférable d'utiliser @ devant une chaîne de caractères ?

Dans le code qui déclare ou utilise un string Je vois généralement les développeurs le déclarer ainsi :

string randomString = @"C:\Random\RandomFolder\ThisFile.xml";

Au lieu de :

string randomString = "C:\\Random\\RandomFolder\\ThisFile.xml";

C'est la seule chose que je vois et pour laquelle il est préférable d'utiliser l'option @ puisque vous n'avez pas besoin d'utiliser le préfixe \\ Mais est-ce qu'il y a une autre utilisation pour laquelle c'est mieux que de s'en passer ?

8voto

Cody Gray Points 102261

En @ indique au compilateur que la chaîne de caractères est un chaîne littérale verbatim et n'exige donc pas que vous échappiez à l'un des caractères. Pas seulement la barre oblique inverse, bien sûr. Aucune séquence d'échappement n'est traitée par le compilateur.

Il est extrêmement difficile de répondre à la question de savoir si c'est "mieux" ou non. Il s'agit d'un choix purement stylistique. D'aucuns pourraient affirmer que le contenu de la chaîne est plus lisible lorsque vous utilisez un littéral de chaîne, plutôt que de devoir échapper tous les caractères. D'autres préfèrent cohérence où toutes les chaînes de caractères contenant des caractères qui devraient normalement être échappés doivent l'être. Il est ainsi plus facile de repérer les erreurs de code en un coup d'œil. (Pour ce que cela vaut, je fais partie de ce dernier camp. Tous mes chemins ont \\ .)

Ceci étant dit, c'est extrêmement pratique pour les expressions régulières, pour lesquelles vous auriez autrement à faire des échappements un peu partout. Et comme elles ne ressemblent pas vraiment à des chaînes de caractères normales, le risque de confusion est minime.

5voto

Matti Virkkunen Points 31633

Les noms de chemin Windows ne sont pas les seuls à contenir beaucoup de barres obliques inverses. Par exemple, les chaînes @ sont très utiles pour les expressions régulières car elles évitent d'avoir à tout saisir en double.

Ils peuvent également s'étendre sur plusieurs lignes, de sorte que si vous devez utiliser des chaînes de caractères sur plusieurs lignes dans votre code, ils sont un peu plus pratiques.

1voto

BrunoLM Points 26573

Simplifie les Regex

@"^(([\w-]+\.)+[\w-]+|([a-zA-Z]{1}|[\w-]{2,}))((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|([a-zA-Z]+[\w-]+\.)+[a-zA-Z]{2,4})$";

Chaîne de plusieurs lignes

string s = @"testing
some

string with multiple
lines";

1voto

Xion Points 11130

Elle est particulièrement utile pour les expressions régulières qui impliquent la correspondance explicite d'un caractère backslash. Comme il s'agit d'un caractère spécial à la fois dans la syntaxe des chaînes C# et dans la syntaxe des expressions rationnelles, il nécessite un "double échappement". Exemple :

string regex = "\\\\.*\\.jpg"

La même expression utilisant la notation @ serait plus ordonnée :

string regex = @"\\.*\.jpg"

0voto

somesh Points 180

"" et @"" sont tous deux des littéraux de chaîne, le premier est un littéral régulier mais le second est un littéral de chaîne verbatim. Préfixe '@' avant toute chaîne de caractères en C# .NET (littéral de chaîne régulière et littéral de chaîne verbatim en C#.NET)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X