web-dev-qa-db-fra.com

Comment utiliser des caractères d'échappement avec interpolation de chaîne en C # 6?

J'utilise l'interpolation de chaîne et j'adore ça, mais j'ai un problème. J'essaie d'inclure une barre oblique inverse dans ma sortie, mais je ne parviens pas à le faire fonctionner. 

Ce que je veux c'est quelque chose comme ça .. 

var domain = "mydomain";
var userName = "myUserName";
var combo = $"{domain}\{userName}"

Je veux que la sortie de combo soit 

myDomain\myUserName

Ce que je reçois est une erreur de syntaxe sur le fait que\soit un caractère d'échappement. Si je mets dans \\ alors l'erreur snytax est parti, mais le résultat est myDomain \\ myUsername

Comment puis-je inclure des caractères échappés dans une chaîne interpolée?

61
Matt

Echapper avec une barre oblique inverse (\) fonctionne pour tous les caractères sauf une accolade.

Si vous essayez d'échapper à une accolade ({ ou }), vous devez utiliser {{ ou }} par https://msdn.Microsoft.com/en-us/library/dn961160.aspx .

... Toutes les occurrences d'accolades doubles ("{{" et "}}") sont converties en une accolade unique.

67
birdamongmen

Vous pouvez le faire en utilisant à la fois le $ @. L'ordre est important.

var combo = $@"{domain}\{userName}";
61
Nhan
$"{domain}\\{user}"

Fonctionne bien - échapper fonctionne comme d'habitude (sauf en échappant {). Au moins sur .NET 4.6 et VS 14.0.22823 D14REL.

Si cela ne fonctionne pas pour une raison quelconque (vous utilisez peut-être une ancienne version du compilateur?), Vous pouvez également essayer d'être plus explicite:

$"{domain}{@"\"}{user}"
3
Luaan

Salut la règle pour échapper à la barre oblique inversée dans la chaîne interpolée est dupliquer la barre oblique inversée:

var domain = "mydomain";
var userName = "myUserName";
var combo = $"{domain}\\{userName}";

 console output

mais si vous utilisez également la chaîne interpolée comme chaîne textuelle, vous n'avez pas besoin d'échapper à la barre oblique inverse:

var domain = "mydomain";
var userName = "myUserName";
var combo = $@"{domain}\{userName}";

et vous obtenez le même:

 console output

Pour un tutoriel sur la chaîne interpolée: voir la vidéo chaîne interpolée

2
freedeveloper

Eduardo a raison. Vous échappez aux accolades en doublant. Par conséquent, si vous souhaitez afficher la variable de domaine sous la forme {mydomain}, vous devez procéder comme suit:

$"{{{domain}}}";

De plus, en supposant que la date actuelle soit le 1er septembre 2016, procédez comme suit:

$"The date is {DateTime.Now}";

générerait quelque chose comme "La date est 2016/09/01 15:04:48 PM" en fonction de votre localisation. Vous pouvez également formater la date en faisant:

$"The date is {DateTime.Now : MMMM dd, yyyy}";

qui produirait "La date est le 1er septembre 2016". Les chaînes interpolées sont beaucoup plus lisibles. Bonne réponse Eduardo.

1
Dirk Strauss

Si je n'ai pas mal compris. La solution est très simple

var domain = "mydomain";
var userName = "myUserName";
var combo = $"{{{domain}}}\\{{{userName}}}";
Console.WriteLine(combo);

Je partage la réponse de birdamongmen et la bonne référence fournie ici J'espère que cela vous sera utile. Mes 5 cents

0
Eduardo