Si vous ne disposez pas de C#6 dans votre projet, vous pouvez utiliser la fonction .Aggregate() de Linq :
var str = "Her name is @name and she's @age years old";
var parameters = new Dictionary<string, object>();
parameters.Add("@name", "Lisa");
parameters.Add("@age", 10);
str = parameters.Aggregate(str, (current, parameter)=> current.Replace(parameter.Key, parameter.Value.ToString()));
Si vous voulez quelque chose correspondant à la syntaxe spécifique de la question, vous pouvez créer une classe assez simple basée sur Aggregate :
public class StringFormatter{
public string Str {get;set;}
public Dictionary<string, object> Parameters {get;set;}
public StringFormatter(string p_str){
Str = p_str;
Parameters = new Dictionary<string, object>();
}
public void Add(string key, object val){
Parameters.Add(key, val);
}
public override string ToString(){
return Parameters.Aggregate(Str, (current, parameter)=> current.Replace(parameter.Key, parameter.Value.ToString()));
}
}
Utilisable comme :
var str = new StringFormatter("Her name is @name and she's @age years old");
str.Add("@name", "Lisa");
str.Add("@age", 10);
Console.WriteLine(str);
Notez qu'il s'agit d'un code propre, conçu pour être facile à comprendre et performant.