2009-09-16 1 views
26

mi hanno una serie come questa:C args # String.Format

object[] args 

e la necessità di inserire questi argomenti in una stringa, ad esempio:

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

invece di:

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

NOTA: in realtà la prima riga di codice funzionava! Ma mancava Args [1]! Scusa e grazie. Punti per ognuno :)

+17

Avete una domanda? – leppie

risposta

69

Il primo esempio dovrebbe funzionare correttamente, a condizione che ci siano almeno due oggetti negli argomenti dell'array.

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

Dovrebbe funzionare nel modo desiderato. La classe String ha la seguente definizione del metodo Formato:.

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

Visto che i "args" nel tuo esempio è un array di oggetti, dovrebbe andare bene in

1

tuo secondo codice di blocco farebbero quello che penso tu stia cercando di realizzare.

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

Hai provato anche la prima linea? Hai visto che dovrebbe funzionare come il secondo?

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

Dovrebbe funzionare quando args è di tipo oggetto [].

3

io non sono sicuro di quello che stai chiedendo, ma uno di quelli dovrebbe funzionare, se si considera che una delle firme per lo String.Format() è

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

più spazzatura ho copiato da Visual Studio:

Sommario: Sostituisce l'elemento formato in uno System.String specificato con il testo equivalente del valore di una corrispondente istanza System.Object in una matrice specificata.

Parametri: formato: Una stringa di formato composito. args: un array System.Object contenente zero o più oggetti da formattare.

valori di ritorno: Una copia di formato in cui gli articoli sono stati sostituiti formato dal System.String equivalente dei corrispondenti istanze di System.Object in args.

Eccezioni: System.ArgumentNullException: il formato o args è nullo. System.FormatException: il formato non è valido. - oppure - Il numero che indica un argomento da formattare è inferiore a zero o maggiore o uguale alla lunghezza dell'array di args.

- Oops sul VB, ma ottieni il punto.

+1

Mi piace il fatto che la definizione dell'API che hai fornito fosse per VB. ;-) –

2

Entrambi gli esempi fanno la stessa cosa: String.Format ha un sovraccarico che accetta un oggetto [] invece di specificare separatamente ciascun argomento.

12

Se non si conosce il numero di elementi dell'array nell'array degli argomenti, provare a utilizzare string.Join().

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

In particolare nel tuo esempio:

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

Personalmente, non mi piace strutture hard-coded di un oggetto array. È troppo da ricordare per tutta l'applicazione e lo rende difficile da mantenere. Preferisco trasformare gli argomenti in un oggetto "Persona" con un costruttore che accetta l'array e sovraccaricare ToString() per visualizzare le informazioni specifiche sui membri dell'oggetto.

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

Quindi è possibile creare un oggetto "Persona" e visualizzare il messaggio quando viene chiamato.

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

Questo è molto simile ad un esempio Microsoft:

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