web-dev-qa-db-fra.com

Arguments C # String.Format

J'ai un tableau comme celui-ci:

object[] args

et devez insérer ces arguments 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]);

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

30
Fabio Milheiro

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);
76
csharptest.net

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

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

Étant donné que les "args" dans votre exemple sont un tableau d'objets, il devrait s'intégrer parfaitement.

14
Stephen

Si vous ne savez pas combien d'éléments de tableau se trouvent 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 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 donc construire un objet "Personne" et afficher le message lors de son 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

13
Rusty Naumann

Je ne sais pas exactement ce que vous demandez, mais l'un ou l'autre devrait fonctionner, étant donné que l'une des signatures de la fonction String.Format () est

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

Plus d'ordures que j'ai copiées à partir de Visual Studio:

Summary: Remplace l'élément de format dans un System.String spécifié par l'équivalent textuel de la valeur d'une instance System.Object correspondante dans un tableau spécifié.

Paramètres: format: Une 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: format ou args est 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.

3
Cᴏʀʏ

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.

2
Lee

Votre deuxième bloc de code ferait ce que je pense que vous essayez d'accomplir.

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

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

1
leppie