using System.Collections.Generic;
public static void Main()
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()));
str = str.Format(parameters);
var str2 = new StringFormatter("Her name is @name and she's @age years old");
str2.Add("@name", "Lisa");
public class StringFormatter{
public string Str {get;set;}
public Dictionary<string, object> Parameters {get;set;}
public StringFormatter(string 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()));
public static class Helpers{
public static string Format(this string str, IDictionary<string, object> parameters){
return parameters.Aggregate(str, (current, parameter)=> current.Replace(parameter.Key, parameter.Value.ToString()));