2009-09-16 6 views
26

J'ai un tableau comme celui-ci:C# String.Format args

object[] args 

et doivent insérer les args dans une chaîne, par exemple:

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

au lieu de:

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

NOTE: En fait, la première ligne de code a fonctionné! Mais args [1] manquait! Désolé et merci. Points pour chacun :)

+17

Avez-vous une question? – leppie

Répondre

69

Votre premier exemple devrait fonctionner correctement, à condition qu'il y ait au moins deux objets dans les arguments du tableau.

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

Cela devrait fonctionner comme vous le souhaitez. La classe String a la définition de la méthode de format suivant:.

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

Vu que les « args » dans votre exemple est un tableau d'objets, il doit être bien droit dans

1

Votre second code bloc ferait ce que je pense que vous essayez d'accomplir.

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

Avez-vous même essayé la première ligne? Avez-vous vu que cela devrait fonctionner de la même manière que le second?

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

Devrait fonctionner lorsque args est de type objet [].

3

Je ne suis pas sûr de ce que vous demandez, mais l'un de ceux-ci devraient travailler, étant donné que l'une des signatures pour la fonction String.Format() est

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

Plus indésirable je copiais à partir de Visual studio:

Résumé: remplace l'élément de format dans un System.String spécifié avec l'équivalent texte de la valeur d'une instance System.Object correspondante dans un tableau spécifique.

Paramètres: format: Chaîne de format composite. args: un tableau System.Object contenant zéro ou plusieurs objets à formater.

Valeurs de retour: Une copie du format dans lequel les éléments de format ont été remplacés par l'équivalent System.String des instances correspondantes de System.Object dans args.

Exceptions: System.ArgumentNullException: le format ou les arguments sont NULL. System.FormatException: le format n'est pas valide. -ou-- Le nombre indiquant un argument à formater est inférieur à zéro ou supérieur ou égal à la longueur du tableau args.

- Oops sur le VB, mais vous obtenez le point.

+1

J'aime que la définition de l'API que vous avez donnée était pour VB. ;-) –

2

Vos deux exemples font la même chose - String.Format a une surcharge qui accepte un objet [] au lieu de spécifier chaque argument séparément.

12

Si vous ne connaissez pas le nombre d'éléments du tableau dans le tableau d'arguments, essayez d'utiliser string.Join().

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

Plus précisément dans votre exemple:

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

Personnellement, je n'aime pas les structures codées en dur d'un objet tableau. C'est trop à retenir tout au long de l'application et il est difficile à maintenir. Je préfère transformer les arguments en un objet "Person" avec un constructeur qui accepte le tableau, et surcharger le ToString() pour afficher les informations spécifiques sur les membres de l'objet.

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

Vous pouvez construire un objet « Personne » et affiche le message lorsqu'il est appelé.

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

Ceci est très similaire à un exemple Microsoft:

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

Questions connexes