2017-05-02 1 views
4

Je sais que nous pouvons utiliser un spécificateur de format pour l'interpolation de chaîne en C# 6spécificateur de format de codage souple pour les chaînes interpolés C# 6.0

var someString = $" the date was ... {_criteria.DateFrom:dd-MMM-yyyy}"; 

Cependant, je suis en utilisant le même format dans la même méthode, encore et encore de sorte voudrais le code doux, mais ne savez pas comment le faire, ou même si son possible,

DateTime favourite; 
DateTime dreaded; 

... 
... 

const string myFormat = "dd-MMM-yyyy"; 

var aBigVerbatimString = [email protected]" 
    my favorite day is {favourite:$myFormat} 
    but my least favourite is {dreaded:$myFormat} 
    blah 
    blah 
    "; 

quelqu'un peut-il me dire comment faire, ou me confirmer son impossible comme je l'ai fait un peu de lecture et n'a rien trouvé pour suggérer son possible

+0

http://stackoverflow.com/a/32360534/916000 –

Répondre

1

interpolation de chaîne est compilé directement dans une instruction de format équivalent,

var someString = $" the date was ... {_criteria.DateFrom:dd-MMM-yyyy}"; 

devient littéralement

var someString = string.Format(
    " the date was ... {0:dd-MMM-yyyy}", 
    _criteria.DateFrom); 

qui est fonctionnellement équivalent à

var someString = string.Format(
    " the date was ... {0}", 
    _criteria.DateFrom.ToString("dd-MMM-yyyy")); 

Parce que le compilateur traite finalement le dd-MMM-yyyy comme une chaîne littérale à transmettre à la méthode ToString(), il n'y a aucun moyen d'éviter id codage en dur lors de l'utilisation de cet idiome.

Si vous souhaitez SoftCode la chaîne de spécificateur de format, vous pouvez choisir d'utiliser directement string.Format, comme suit:

var someString = string.Format(
    " the date was ... {0}", 
    _criteria.DateFrom.ToString(formatSpecifier));