我想用转义的花括号(“ {{”和“}}”)之间的格式化值构建字符串。
我宁愿使用 format string 而不是ToString()方法来格式化值。
//Works fine but don't use composite format string
$"{{{Math.PI.ToString("n2")}}}" // return {3.14}
//Use composite format string but does not work
$"{{{Math.PI:n2}}} // return {n2}
//Use composite format string but does not work
$"{{{null:n2}}} // return {
//Use composite format string, work fine but I do not want extra space
$"{{{Math.PI:n2} }} // return {3.14 }
答案 0 :(得分:-1)
您可以使用内插字符串的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}}}"));