2009-09-16 4 views
26

는이 같은 배열이 있습니다C#의 및 String.format의 인수

object[] args 

을 예를 들어, 문자열에서 그 인수를 삽입해야합니다

str = String.Format("Her name is {0} and she's {1} years old", args); 

대신 :

str = String.Format("Her name is {0} and she's {1} years old", args[0], args[1]); 

참고 : 실제로 첫 번째 코드 줄이 작동했습니다! 하지만 args [1]가 누락되었습니다! 죄송합니다. 감사합니다. 모든 점 :

+17

당신이 질문이 있습니까? – leppie

답변

69

첫 번째 예제는 배열 args에 적어도 두 개의 객체가 있으면 정상적으로 작동합니다.

object[] args = new object[] { "Alice", 2 }; 
str = String.Format("Her name is {0} and she's {1} years old", args); 
11

원하는대로 작동합니다. String 클래스는 다음과 같은 형식의 메서드 정의가 있습니다.

public static string Format(string format, params object[] args); 

이 예에서 "인수는"객체의 배열, 그것에서 잘 맞아야 방법으로보고를

1

두 번째 코드 블록은 할 것 당신이 성취하려고하는 것 같아요.

string.Format("Hello {0}, {1} and {2}", new object[] { "World", "Foo", "Bar" }); 
1

첫 번째 줄을 사용해 보셨습니까? 두 번째와 똑같이 작동해야한다는 것을 알았습니까?

2
str = String.Format("Her name is {0} and she's {1} years old", args); 

args의 유형이 object [] 인 경우 작동해야합니다.

3

는 당신이 요구하는지 모르겠지만, 그 중 하나는 및 String.format에 대한 서명 중 하나() 함수는 내가 Visual에서 복사

Public Shared Function Format(ByVal format As String, ByVal ParamArray args() As Object) As String 

더 많은 정크임을 고려 작동합니다 스튜디오 :

요약 : 지정된 어레이 내의 대응하는 System.Object 인스턴스의 값의 텍스트와 동등한 소정의 형식 선택 System.String 항목을 대체.

매개 변수 : 형식 : 합성 형식 문자열입니다. args : 형식을 지정할 0 개 이상의 개체가 포함 된 System.Object 배열입니다.

반환 값 : 형식 항목이 args에있는 System.Object의 해당 인스턴스에 해당하는 System.String으로 대체 된 형식의 복사본.

예외 : System.ArgumentNullException : 형식 또는 args가 null입니다. System.FormatException : 형식이 잘못되었습니다. - 또는 - 형식화 할 인수를 나타내는 숫자가 0보다 작거나 args 배열의 길이보다 크거나 같습니다.

- VB에서 죄송합니다.

+1

내가 제공 한 API 정의가 VB 용이었습니다. ;-) –

2

두 예제 모두 똑같은 일을합니다. String.Format에는 각 인수를 개별적으로 지정하는 대신 객체 []를 허용하는 오버로드가 있습니다.

12

arguments 배열에있는 배열 요소의 수를 모르는 경우 string.Join()을 사용해보십시오. 당신의 구체적인 예에 ​​

string.Format("Arguments passed in to the program are: {0}", string.Join(" ", args)); 

: 개인적으로

string.Format("Her name is {0} years old", string.Join(" and she's ", args)); 

, 나는 배열 객체의 하드 코딩 구조를 좋아하지 않는다. 이는 애플리케이션 전반에 걸쳐 기억하기에는 너무 힘들고 유지하기가 어렵습니다. 인수를 배열을 허용하는 생성자를 사용하여 "Person"객체로 바꾸고 객체 멤버에 대한 특정 정보를 표시하도록 ToString()을 오버로드합니다.

class Person 
{ 
    private string m_sName; 
    private string m_sAge; 

    public Person(string[] args) 
    { 
     m_sName = args[0]; 
     m_sAge = args[1]; 
    } 

    public override string ToString() 
    { 
     return string.Format("Her name is {0} and she's {1} years old.", m_sName, m_sAge); 
    } 
} 

"Person"개체를 구성하고 호출 할 때 메시지를 표시 할 수 있습니다.

var oNewPerson = new Person(args); 
console.WriteLine(oNewPerson.ToString()); 

이것은 마이크로 소프트의 예와 매우 유사합니다 :

http://msdn.microsoft.com/en-us/library/ms173154(v=vs.80).aspx