2015-12-10 9 views
5

So che possiamo sfuggire alla parentesi graffa in C# utilizzando {{ e }}. Ma non sembrano funzionare bene se hanno ragione dopo un modificatore di formato (come {0:F6}).La parentesi graffa C# escape non funziona con il modificatore di formato?

string str; 

// Prints "{3.14}" as expected 
str = string.Format("{{{0}}}", 3.14); 
Console.WriteLine(str); 

// Expected "{3.140000}", found "{F6}" 
str = string.Format("{{{0:F6}}}", 3.14); 
Console.WriteLine(str); 
+2

Perché non basta 'str = "{" + string.Format ("{0: F6}", 3.14) + "}"; ' – Pikoh

+2

@Pikoh penso che la domanda riguardi più" questo comportamento è previsto in C# " – user1666620

+0

La risposta di @ blas3nik spiega perché; vedere anche MSDN "Escaping Braces" in "[Composite Formatting] (https://msdn.microsoft.com/en-us/library/txafckwd (v = vs.110) .aspx)" dove è chiaramente spiegato; in particolare "* l'interpretazione delle parentesi graffe non è supportata *". – gerryLowry

risposta

6

Ecco come C# elabora le parentesi graffe, è noto. See here

Si può sfuggire in questo modo (per esempio, ci sono diversi modi):

var str = string.Format("{0}{1:F6}{2}", "{", 3.14, "}"); 
Console.WriteLine(str); 
+0

grazie per il link - qualcosa da ricordare se mai mi sono imbattuto in questo. Avrei votato due volte se potessi. – user1666620

+0

La tua risposta è corretta (+1) ma definisco sicuramente un bug che Microsoft non ha mai corretto. – xxbbcc

+0

@xxbbcc non è un bug. 'F6}}' è preso come formato della variabile. beh sarebbe bello se lo rendessero non-goloso;) –

1

Prova questa:

String.Format("{0}{1:F6}{2}", "{",3.14, "}") 
Problemi correlati