2009-09-16 8 views
26

mam tablicę jak poniżej:C arg # string.Format

object[] args 

potrzeby dodania te argumenty w ciągu, na przykład:

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

zamiast:

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

UWAGA: Właściwie pierwsza linia kodu działała! Ale brakowało argumentów [1]! Przepraszam i dziękuję. Punkty za każdego :)

+17

Czy masz pytanie? – leppie

Odpowiedz

69

Twój pierwszy przykład powinien działać dobrze, o ile w argumencie macierzy są co najmniej dwa obiekty.

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

Powinno działać tak, jak tego chcesz. Klasa String posiada następującą definicję metody format:.

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

skoro jak „args” w przykładzie jest tablicą obiektów, należy go dopasować prawo w

1

Twój drugi kod blok zrobi co myślę, że próbujesz osiągnąć.

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

Czy próbowałeś nawet pierwszej linii? Czy widziałeś, że powinien działać tak samo jak drugi?

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

Powinien działać, gdy args jest typu obiektu [].

3

nie jestem pewien, o co prosisz, ale jeden z tych, powinien działać, biorąc pod uwagę, że jednym z podpisów na String.Format() funkcja jest

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

Więcej śmieci skopiowane z Visual Studio:

Podsumowanie: Zastępuje element formatu w określonym System.String z równoważnikiem tekstowym wartości odpowiadającej System.Object przykład w określonej tablicy.

Parametry: Format : Kompozyt format string. args: Tablica System.Object zawierająca zero lub więcej obiektów do sformatowania.

Zwracane wartości: Kopia formatu, w którym elementy formatowania zostały zastąpione przez odpowiednik system.string odpowiednich instancji System.Object w args.

Wyjątki: System.ArgumentNullException: Format lub args jest null. System.FormatException: format jest nieprawidłowy. -lub- Liczba wskazująca argument do sformatowania jest mniejsza od zera lub większa lub równa długości tablicy args.

- Ups na VB, ale masz rację.

+1

Uwielbiam to, że definicja API, którą podałeś, dotyczyła VB. ;-) –

2

Oba przykłady robią to samo - String.Format ma przeciążenie, które akceptuje obiekt [] zamiast określać każdy argument osobno.

12

Jeśli nie wiesz, ile elementów tablicy znajduje się w tablicy argumentów, spróbuj użyć metody string.Join().

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

szczególności w przykładzie:

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

Osobiście nie podoba mi ciężko kodowanych struktury obiektu tablicy. To zbyt wiele do zapamiętania w całej aplikacji i sprawia, że ​​trudno ją utrzymać. Wolałbym przekształcić argumenty w obiekt "Person" z konstruktorem, który akceptuje tablicę i przeciążyć ToString(), aby wyświetlić konkretne informacje o elementach obiektu.

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); 
    } 
} 

Można więc skonstruować obiekt "Person" i wyświetlić komunikat po wywołaniu.

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

ten jest bardzo podobny do przykładu Microsoft:

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