如何委托给默认格式提供程序?

Tho*_*ith 5 c# string-formatting

我想创建一个EscapingFormatProvider在返回格式化字符串之前自动转义 HTML 格式的字符串,除非格式参数以 ! 开头:

string.Format(new EscapingFormatProvider(), "<div>{0}</div>", "<script src='foo'></script>");
// => <div>&lt;script src='foo'&gt;&lt;/script&gt;</div>

string.Format(new EscapingFormatProvider(), "<div>{0:!}</div>", "<script src='foo'></script>");
// => <div><script src='foo'></script></div>
Run Code Online (Sandbox Code Playgroud)

我希望它传递格式参数,而不是 ! 如果有,则使用默认格式化程序。唯一的麻烦是,我不知道如何获得默认的格式化程序。我发现的所有示例都没有解决委托给默认格式化程序的问题。

编辑:这就是我想出的:

private class EscapingFormatProvider : IFormatProvider, ICustomFormatter
{
    public object GetFormat(Type formatType) { return this; }

    private string DefaultFormat(string format, object arg)
    {
        return string.Format("{0:" + format + "}", arg);
    }

    public string Format(string format, object arg, IFormatProvider formatProvider)
    {
        return (format.First() == '!')
            ? HttpUtility.HtmlEncode(DefaultFormat(format.Substring(1), arg))
            : DefaultFormat(format, arg);
    }
}
Run Code Online (Sandbox Code Playgroud)

这有点间接,但我认为它有效。

eko*_*lis 1

如果我理解正确,那么使用默认格式提供程序所需要做的就是调用不采用 IFormatProvider 的 string.Format 的重载!或者您所说的“默认格式化程序”还有其他含义,或者您担心本地化吗?