문자열 내에서 변수 사용


91

PHP에서 다음을 수행 할 수 있습니다.

$name = 'John';
$var = "Hello {$name}";    // => Hello John

C #에 유사한 언어 구조가 있습니까?

나는 알고 String.Format();있지만 문자열에 대한 함수 / 메소드를 호출하지 않고도 수행 할 수 있는지 알고 싶습니다.

답변:


225

C # 6에서는 문자열 보간을 사용할 수 있습니다 .

string name = "John";
string result = $"Hello {name}";

Visual Studio에서 이에 대한 구문 강조 표시를 통해 가독성이 높고 모든 토큰이 확인됩니다.


88

이 기능은 C # 5 이하에 기본 제공되지 않습니다.
업데이트 : C # 6은 이제 문자열 보간을 지원합니다. 최신 답변을 참조하세요.

이를 수행하는 권장 방법은 다음과 String.Format같습니다.

string name = "Scott";
string output = String.Format("Hello {0}", name);

그러나 나는 리플렉션을 통해 명명 된 자리 표시자를 사용할 수 있도록 확장되는 SmartFormat 이라는 작은 오픈 소스 라이브러리 String.Format를 작성했습니다. 따라서 다음을 수행 할 수 있습니다.

string name = "Scott";
string output = Smart.Format("Hello {name}", new{name}); // Results in "Hello Scott".

네가 좋아하길 바래!


2
리플렉션 구현과 표준 string.Format을 사용하면 어떤 종류의 성능 저하가 있습니까?
styfle 2013-06-14

위키에 이미 성능 페이지 가 있습니다. 꽤 유망 해 보입니다. 잘 하셨어요!
styfle 2013-06-14

예, 실적 페이지에서 귀하의 질문을 해결할 수 있다고 생각하지만 "Hello {0}"대 "Hello {name}"을 비교 한 적이 없습니다. 분명히 반사는 더 오래 걸릴 것입니다. 그러나 캐싱 기능을 사용하면 구문 분석 성능이 향상되고 차이를 최소화 할 수 있습니다. 어느 쪽이든, 모든 것이 빠릅니다!
스콧 Rippey

1
이것은 더 이상 사실이 아닙니다. C # 6는 기능으로이 추가
콜 존슨에게

6

다음 방법을 사용하십시오.

1 : 방법 1

var count = 123;
var message = $"Rows count is: {count}";

2 : 방법 2

var count = 123;
var message = "Rows count is:" + count;

3 : 방법 3

var count = 123;
var message = string.Format("Rows count is:{0}", count);

4 : 방법 4

var count = 123;
var message = @"Rows
                count
                is:{0}" + count;

5 : 방법 5

var count = 123;
var message = $@"Rows 
                 count 
                 is: {count}";

1
이러한 각 방법을 사용하는 이유에 대한 설명을 추가하는 것이 좋습니다.
ZombieCode

5

C # 5 (-VS2013)까지 함수 / 메소드를 호출해야합니다. String.Format+ 연산자의 오버로드 와 같은 "정상"함수 입니다.

string str = "Hello " + name; // This calls an overload of operator +.

C # 6 (VS2015)에서는 문자열 보간이 도입되었습니다 (다른 답변에서 설명한대로).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.