2016-11-14 1 views
1

Je souhaite interpoler non seulement les jetons d'une chaîne, mais également le format lui-même. Voici un exemple en utilisant string.Format qui charge la chaîne de format à partir d'une variable locale:Interpolation des chaînes de format dans les chaînes interpolées

object boxedDate = DateTime.Today; 
var dateFormat = "MM-dd-yyyy"; 
var dateString = string.Format($"{{0:{dateFormat}}}", boxedDate); 

Avec la syntaxe de chaîne interpolée, cependant, il semble que la partie de format de la chaîne est purement littérale. Conceptuellement, je voudrais faire quelque chose comme ceci:

dateString = $"{boxedDate:{dateFormat}}"; 

Ne fonctionne pas, bien sûr. Je sais que je pourrais unbox le datetime et invoquer .ToString() comme ceci:

dateString = $"{((DateTime)boxedDate).ToString(dateFormat)}"; 

... mais qui me demande de connaître le type à l'exécution. Cela peut être un nombre décimal, un nombre entier, une date, etc.

Ce n'est pas un briseur d'affaire ou quoi que ce soit. Je pourrais toujours utiliser string.Format s'il n'y a aucun moyen de le faire avec une syntaxe de chaîne interpolée.

Répondre

1

Je pense qu'il n'y a pas d'échappatoire sachant le type pour sélectionner le format approprié - ou une logique de conversion. Le type FormattableString peut aider votre cause un peu cependant.

var lcid = "en-US"; 
FormattableString f = $"{model.Date:D}"; 
var s = f.ToString(new CultureInfo(lcid)); 

Dans ce cas, je laisse le système ajuster le format d'affichage en fonction de l'information de culture. Vous devez connaître le type ou convertir la valeur à l'avance, bien sûr.

À part cela, oui, je pense que les méthodes ToString et string.Format sont votre meilleur pari.