C # 6에서 문자열 보간과 함께 이스케이프 문자를 사용하는 방법은 무엇입니까?


88

나는 문자열 보간을 사용하고 그것을 좋아했지만 출력에 백 슬래시를 포함하려고 시도했지만 작동하지 못하는 문제가 있습니다.

내가 원하는 건 이런거 ..

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

콤보의 출력이

myDomain\myUserName

내가 얻는 것은 \ 이스케이프 문자라는 구문 오류입니다. \\를 입력하면 구문 오류가 사라지지만 출력은 myDomain \\ myUsername입니다.

보간 된 문자열에 이스케이프 문자를 어떻게 포함시킬 수 있습니까?


감사. 하지만 문자열 보간을 사용할 수 없습니까? 모든 것을 탈출하고 싶지는 않습니다. 보간 된 문자열 내부에 백 슬래시를 사용하고 싶습니다.
매트

당신은 할 수 없습니다. 그의 대답은 틀렸다.
greenhoorn

3
나에게 버그 같은 느낌) \\ 작동합니다
매트

$ {domain} \\ {userName}에 대한 올바른 출력을 얻습니다 .. 웹 응용 프로그램입니까?
greenhoorn

2
Nhan의 대답은 완벽하게 작동하는 것 같습니다. $@"{domain}\{userName}". 시도해보고 받아 들여야한다고 생각합니다. 나는 도메인과 사용자 이름까지 똑같은 문제가 있었고 그의 방법은 잘 작동합니다.
ProfK

답변:


107

백 슬래시 ( \)로 이스케이프 하면 중괄호를 제외한 모든 문자에서 작동합니다.

당신이 중괄호를 탈출하려고 (경우 {또는 })을 사용해야합니다 {{또는 }}https://msdn.microsoft.com/en-us/library/dn961160.aspx .

... 모든 이중 중괄호 ( "{{"및 "}}")는 단일 중괄호로 변환됩니다.


OP가 명확하게 설명하는 것처럼 백 슬래시 자체에는 작동하지 않습니다.
ProfK dec

80

$ @를 모두 사용하여이를 수행 할 수 있습니다. 순서가 중요합니다.

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

4
가장 좋고 간단한 대답입니다. 사람들이 왜 더 복잡한 답을 선택하는지 이해하지 못합니다. 그대로 삽입 된 문자열에 대한 MSDN 링크 docs.microsoft.com/en-us/dotnet/csharp/tutorials/...
Alex34758

3
"C # 8.0부터는 $ 및 @ 토큰을 어떤 순서로든 사용할 수 있습니다."(위 주석의 Alex 링크에서).
Casey Plummer 2019 년

9

Eduardo가 맞습니다. 두 배로 늘려 중괄호를 이스케이프합니다. 따라서 도메인 변수를 {mydomain}으로 출력하려면 다음을 수행해야합니다.

$"{{{domain}}}";

또한 현재 날짜가 2016 년 9 월 1 일이라고 가정하면 다음과 같이됩니다.

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

현지화에 따라 "The date is 2016/09/01 3:04:48 PM"과 같은 결과를 출력합니다. 다음을 수행하여 날짜 형식을 지정할 수도 있습니다.

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

그러면 "The date is September 1, 2016"이 출력됩니다. 보간 된 문자열은 훨씬 더 읽기 쉽습니다. 좋은 대답 Eduardo.


1
OP는 중괄호를 이스케이프하려고하지 않습니다. 그들은 백 슬래시 자체를 이스케이프하려고 시도하고 있으며 보통의`\\`는 보간 된 문자열에서 작동하지 않는다고 명시합니다.
ProfK

3
OP가 중괄호를 이스케이프하고 싶었고 첫 번째 Google 항목이 이것이 무엇인지 물어 보는 것은 상관 없습니다. 따라서 OP 제목은 Google을 오도하므로 이것은 유효한 대답이며 찬성 할 가치가 있습니다.
AndrewBenjamin

4
$"{domain}\\{user}"

잘 작동합니다. 이스케이프는 평소와 같이 작동합니다 (이스케이프 할 때 제외 {). 적어도 .NET 4.6 및 VS 14.0.22823 D14REL에서.

어떤 이유로 작동하지 않는 경우 (이전 버전의 컴파일러를 사용하고 있습니까?), 더 명시 적으로 시도해 볼 수도 있습니다.

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

저도 그렇게 생각했습니다. 흥미롭게도, 내 Surface pro 3에서는 코드가 일반 \\ 또는 명시 적 @ "\"에서 잘 작동하지만 내 작업 시스템에서는 그렇지 않습니다. 그래서 설치된 버전과 관련하여 머리에 못을 박았을 것입니다. 내 작업 기계는 불행히도 사용 가능한 업데이트가 없다고 말합니다. 그래서 내 질문은 내 컴퓨터에서 .net 4.6의 정확한 버전 / 빌드를 어떻게 결정합니까? 빌드 / 버전 번호에 대한 많은 지침을 찾을 수 없기 때문에 상황이 조금 변경된 것 같습니다.
Matt

내가 알 수 있듯이 두 컴퓨터에서 동일한 버전의 .net 및 2015 RC를 실행하고 있습니다. 내가 생각할 수있는 유일한 차이점은 예상대로 작동하는 컴퓨터 (SP3)가 Windows 10의 최신 내부자 미리보기를 실행하고 있다는 것입니다. .net 프레임 워크가이 기능과 함께 제공된다고 생각합니다. 그래도 구체적으로 확인하는 방법을 모르겠습니다.
Matt

UPDATE 의 C 찾고 : \ WINDOWS \ microsoft.net \ framework64 \ v4.0.30319 폴더 나 차이를 볼 수 있습니다 clr.dll에 대한 속성 정보에서. 내 표면의 버전은 4.6.79.0이고 내 작업 컴퓨터의 버전은 4.6.57.0입니다. 제 질문은 이제 4.6.57.0에서 4.6.79.0으로 어떻게 업그레이드합니까? (이게 왜 그렇게 힘들어요!;)
Matt

@Matt 나는 그게 다라고 생각하지 않습니다-4.6.57.0도 있고 잘 작동합니다. 일을 엉망으로 만드는 Visual Studio 확장을 설치할 수 있습니까?
Luaan 2015

업데이트가 표시되지 않는데도 동작의 차이가 발견되는 경우 최신 C # 기능을 사용하는 프로젝트에서 NuGet 패키지 "Microsoft.Net.Compilers"를 사용하는 것이 좋습니다. 이것은 관찰 된 행동의 차이를 해결할 수 있습니다. 우리 프로젝트에서 그랬습니다.
Manfred

3

안녕하세요, 보간 된 문자열에서 백 슬래시를 이스케이프하는 규칙은 백 슬래시와 중복됩니다.

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

콘솔 출력

그러나 보간 된 문자열을 축어 문자열로 사용하는 경우 백 슬래시를 이스케이프 할 필요가 없습니다.

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

그리고 당신은 같은 것을 얻습니다.

콘솔 출력

보간 된 문자열에 대한 자습서 : 비디오 보간 된 문자열 참조


0

내가 이해하지 않았다면. 해결책은 정말 간단합니다

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

나는 거기에 제공된 좋은 참조뿐만 아니라 birdamongmen 답변을 공유합니다. 도움이되기를 바랍니다. 내 5 센트


1
당신은 오해했습니다. OP는 중괄호를 이스케이프하려고하지 않습니다. 그들은 백 슬래시 자체를 이스케이프하려고하고 있으며 보통의`\\`는 보간 된 문자열에서 작동하지 않는다고
명시

-2

이것을 사용할 수 있습니다-

'First, declare the curley braces as chars
        Dim LeftBrace As Char = "{"
        Dim RightBrace As Char = "}"

        'Then in your string, use like this-
        Dim myStr As String = $"This is a {LeftBrace}String{RightBrace}"

        'Now, the output will be
        ' This is a {string}code here

1
이것은 C #이 아닙니까? (하지만 VB.NET?)
Julian

글쎄, 이것은 vb .net 프로그래머가 그의 질문에 대한 대답을 얻을 때와 같은 느낌입니다.
Vinod KC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.