Вы можете использовать преобразование FormattableString
из интерполированной строки, чтобы вызвать пользовательский IFormatter для решения проблемы.К сожалению, вы не можете использовать метод расширения, потому что неявное преобразование из интерполированной строки в FormattableString
не происходит для цели метода расширения.
public class HandleBraces : IFormatProvider, ICustomFormatter {
public string Format(string format, object arg, IFormatProvider formatProvider) =>
(format != null && format.EndsWith("}")) ? String.Format($"{{0:{format.Substring(0, format.Length - 1)}{'}'}", arg) + "}"
: null;
public object GetFormat(Type formatType) => this;
static HandleBraces HBFormatter = new HandleBraces();
public static string Fix(FormattableString fs) => fs.ToString(HBFormatter);
}
Теперь вы можете использовать Fix
:
Console.WriteLine(HandleBraces.Fix($"{{{Math.PI:n2}}}"));