Hallo,
danke herbivore für den Tipp, ich habe das FormatsWith entsprechend angepasst, um genau die oben genannte Syntax zu erreichen.
Hier der Code, sollte es jemanden interessieren:
public static string FormatWith(this string format, IFormatProvider provider, object source)
{
if (format == null)
throw new ArgumentNullException("format");
Regex r = new Regex(@"\{\{|\{([\w\.\[\]]+)((?:[,:][^}]+)?\})",
RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);
List<object> values = new List<object>();
string rewrittenFormat = r.Replace(format, delegate(Match m)
{
string propertyName = m.Groups[1].Value;
if (propertyName.Length == 0)
return m.Value;
values.Add(propertyName == "0" ? source : DataBinder.Eval(source, propertyName));
string len = m.Groups[2].Value.Replace(",", "").Replace("}", "").Replace(" ", "").Replace(":","");
if (!String.IsNullOrEmpty(len))
{
int leng;
if (Int32.TryParse(len, out leng))
{
string value = values[values.Count - 1].ToString();
value = value.Substring(0, leng);
values[values.Count - 1] = value;
}
}
return "{" + (values.Count - 1) +"}";
});
return string.Format(provider, rewrittenFormat, values.ToArray());
}
mfg
Serial