2009-05-18 2 views
0

나는 경우C#을 문자열 삽입은

... C 번호에 비교적 새로운 해요 및 문자열 삽입 (즉 "some {0} string", toInsert) 알아 내려고 노력하고, 내가 기대하지 않은 문제가 가로 질러 여기서 두 생성자가 있습니다 :

public MyClass(String arg1) { ... } 

public MyClass(String arg1, String arg2) { ... } 

문자열 삽입시 첫 번째 생성자를 사용할 수 있습니까?

... 
toInsert = "def" 
myClass = new MyClass("abc{0}ghi", toInsert) 
... 

또는 C# 두 번째 생성자으로 이것을 해석하고 첫 번째 인수로 리터럴 "abc{0}ghi"을 통과 할 것인가?

답변

9

예, 이것은 단지 두 번째 매개 변수로 해석됩니다.

설명하는 동작을 문자열 서식이라고하며이 스타일의 문자열을 허용하는 모든 것은 백그라운드에서 string.Format()을 사용합니다. 자세한 내용은 해당 메서드의 설명서를 참조하십시오. 그냥 할

myClass = new MyClass(string.Format("abc{0}ghi", toInsert)); 
+0

사실 String.Format()은 StringBuilder.AppendFormat()을 호출합니다. –

+0

그래서 항상 하나의 생성자가있는 클래스가 새로운 클래스를 얻는 길에서 버그를 피하기 위해 string.Format()에서 서식을 래핑 하시겠습니까? – tgray

+0

아니요, 그것은 부당한 결론입니다. 새로운 MyClass (A)는 하나의 매개 변수를받는 ctor를 호출하고 A와 B를 대체하는 것에 상관없이 새로운 MyClass (A, B)는 2 개의 매개 변수를받는 ctor를 호출합니다. A에 대해 "abc {0} ghi" 이것은 당신이 2 개의 매개 변수를 통과했다는 사실을 바꾸지 않습니다. – Cheeso

5

:

사용이 코드를 원하는 동작을 얻으려면

public MyClass(string format, params object[] args) 
{ 
    this.FormattedValue = string.Format(format, args); 
} 
2

또는 C#은 두 번째 생성자으로 이것을 해석하고 문자 그대로 "ABC를 전달합니다 {0} ghi "를 첫 번째 인수로 사용 하시겠습니까?

이것은 올바른 대답입니다. String.Format ("abc {0} ghi", toInsert)를 사용하면 첫 번째 생성자가 사용됩니다.