보간과 함께 완전 문자열을 어떻게 사용합니까?


133

C # 6에는 보간 된 문자열이라는 새로운 기능이 있습니다.

이를 통해 인덱스에 의존하지 않고 표현식을 코드에 직접 넣을 수 있습니다.

string s = string.Format("Adding \"{0}\" and {1} to foobar.", x, this.Y());

된다 :

string s = $"Adding \"{x}\" and {this.Y()} to foobar.";

그러나 다음과 같이 완전 문자열 (주로 SQL 문)을 사용하여 여러 줄에 걸쳐 많은 문자열이 있습니다.

string s = string.Format(@"Result...
Adding ""{0}"" and {1} to foobar:
{2}", x, this.Y(), x.GetLog());

이것을 일반 문자열로 되 돌리는 것은 지저분 해 보입니다.

string s = "Result...\r\n" +
$"Adding \"{x}\" and {this.Y()} to foobar:\r\n" +
x.GetLog().ToString();

축약 형 문자열과 보간 된 문자열을 함께 사용하려면 어떻게합니까?


3
실제로 SQL 문자열에 관한 것이라면 매개 변수화 된 쿼리를 대신 사용하지 않는 이유가 있습니까?
svick

1
"주문형 문자열 (주로 SQL 문)을 사용하여 여러 줄에 걸쳐 많은 문자열이 있습니다."SQL 주입 공격을 가능하게하는 많은 SQL 문자열이있는 것처럼 들립니다.
Cetin Basoz

1
@svick 우리는 모든 사용자 입력이 매개 변수화됩니다. 코드에서 엔티티에 대한 SQL을 동적으로 작성하므로 여전히 동적 SQL을 많이 사용합니다.
Keith

1
@CetinBasoz 우리는하지 않습니다-모든 사용자 입력이 매개 변수화됩니다. 동적 SQL이있는 환경이 많이 있습니다 (예 : LINQ 또는 기타 객체 매핑 프레임 워크).
Keith

답변:


194

동일한 문자열에 접두사 $@접두사를 모두 적용 할 수 있습니다 .

string s = $@"Result...
Adding ""{x}"" and {this.Y()} to foobar:
{x.GetLog()}";

되고 있기 때문에 C # 6에 도입 , 그대로 문자열 보간 토큰으로 시작했다 $@, 하지만 C # 8로 시작, 당신도 사용할 수 있습니다 $@또는@$ .


57
반대 ( @$"...")가 작동하지 않아 나를 여기로 데려옵니다.
Sinatr

12
@Sinatr 예, 그것은 $@"..."순서대로 있어야합니다.
Keith

36
그렇지 않을 $@때 작동 한다는 사실은 @$생각할 때 완벽하게 이해됩니다. 이 구문을 사용하기 시작했을 때 자주 발생하는 이것에 대해 혼란 스러울 때, 나는 항상 "이 축어 문자열 보간"이라고 말하면서 그 반대는 말이되지 않습니다.
Heki

1
@RayLuo는 실제로는 아니지만 다양한 .NET JSON 시리얼 라이저가 얼마나 빨라 졌는지에 따라 어쨌든 JSON을 직접 인코딩해서는 안됩니다.
Keith

1
기존에 듀오를 적용하는 경우을 const string삭제하십시오 const.
bvj
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.