public static TypedMessageFormat Define <M>(string template, params Expression <Func <M, object> >[] Selectors) { var result = template; Selectors.Mapi((i, selector) => result = result.Replace($"@p{i + 1}", $"@{selector.GetValueMemberName()}")); var format = new TypedMessageFormat(typeof(M), result); _Formats.TryAdd(typeof(M), format); return(format); }
static string format <M>(M message, TypedMessageFormat template) { if (message == null) { return("null"); } if (template.IsDefault) { return(message.ToString()); } var output = template.FormatString; foreach (var argValue in propertyValues(message)) { var search = $"@{argValue.Name}"; var replace = formatValue(argValue.Value); output = output.Replace(search, replace); } return(output); }