Que signifie {0} lorsqu'il est trouvé dans une chaîne en C #?

85

Dans un dictionnaire comme celui-ci:

Dictionary<string, string> openWith = new Dictionary<string, string>();

openWith.Add("txt", "notepad.exe");
openWith.Add("bmp", "paint.exe");
openWith.Add("dib", "paint.exe");
openWith.Add("rtf", "wordpad.exe");

Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);

La sortie est:

Pour Key = "rtf" value = wordpad.exe

Qu'est-ce que cela {0}signifie?

Ricardo
la source

Réponses:

180

Vous imprimez une chaîne formatée. Le {0} signifie insérer le premier paramètre après la chaîne de format; dans ce cas la valeur associée à la clé "rtf".

Pour String.Format, qui est similaire, si vous aviez quelque chose comme

//            Format string                    {0}           {1}
String.Format("This {0}.  The value is {1}.",  "is a test",  42 ) 

vous créeriez une chaîne "Ceci est un test . La valeur est 42 ".

Vous pouvez également utiliser des expressions et imprimer des valeurs plusieurs fois:

//            Format string              {0} {1}  {2}
String.Format("Fib: {0}, {0}, {1}, {2}", 1,  1+1, 1+2) 

donnant "Fib: 1 , 1 , 2 , 3 "

Pour en savoir plus, consultez http://msdn.microsoft.com/en-us/library/txafckwd.aspx , qui traite du formatage composite.

Daniel LeCheminant
la source
25

C'est un espace réservé dans la chaîne.

Par exemple,

string b = "world.";

Console.WriteLine("Hello {0}", b);

produirait cette sortie:

Hello world.

En outre, vous pouvez avoir autant d'espaces réservés que vous le souhaitez. Cela fonctionne également sur String.Format:

string b = "world.";
string a = String.Format("Hello {0}", b);

Console.WriteLine(a);

Et vous obtiendrez toujours le même résultat.

Steven DeWitt
la source
11

En plus de la valeur que vous souhaitez imprimer, le {0} {1}, etc., vous pouvez spécifier un format. Par exemple, {0,4}sera une valeur complétée à quatre espaces.

Il existe un certain nombre de spécificateurs de format intégrés et, en plus, vous pouvez créer le vôtre. Pour un didacticiel / liste décent, consultez Formatage de chaînes en C # . En outre, il y a une FAQ ici .

Muad'Dib
la source
6

Pour référence future, dans Visual Studio, vous pouvez essayer de placer le curseur dans le nom de la méthode (par exemple, WriteLine) et appuyer sur F1pour afficher l'aide sur ce contexte. Creuser devrait alors vous trouver String.Format()dans ce cas, avec de nombreuses informations utiles.

Notez que mettre en évidence une sélection (par exemple, double-cliquer ou faire une sélection par glisser-déposer) et appuyer sur F1ne fait qu'une recherche de chaîne non contextuelle (ce qui a tendance à être nul pour trouver quelque chose d'utile), alors assurez-vous de placer le curseur n'importe où à l'intérieur le mot sans le mettre en évidence.

Ceci est également utile pour la documentation sur les classes et autres types.

Rob Parker
la source
5

C'est un espace réservé pour le premier paramètre qui, dans votre cas, est évalué à "wordpad.exe".

Si vous aviez un paramètre supplémentaire, vous utiliseriez {1}, etc.

Bravax
la source
4

C'est un espace réservé pour un paramètre tout comme le %sspécificateur de format agit à l'intérieur printf.

Vous pouvez également commencer à ajouter des éléments supplémentaires pour déterminer le format, bien que cela ait plus de sens avec une variable numérique ( exemples ici ).

Tapis
la source
0

C'est ce que nous avons appelé la mise en forme composite du .NET Framework pour convertir la valeur d'un objet en sa représentation textuelle et incorporer cette représentation dans une chaîne. La chaîne résultante est écrite dans le flux de sortie.

La méthode Console.WriteLine surchargée (chaîne, objet) Écrit la représentation textuelle de l'objet spécifié, suivie de la terminaison de ligne actuelle, dans le flux de sortie standard à l'aide des informations de format spécifiées.

Sujith Karivelil
la source