为什么“ GetFormat”被调用两次?

班克斯·桑

我有一个IFormatProvider注销它传递的类型:

internal class LoggingFormatProvider : IFormatProvider
{
    public object GetFormat(Type formatType)
    {
        WriteLine($"  formatType: {formatType.FullName}");
        return null;
    }
}

当我用以下代码调用此代码时:

var myLoggingProvider = new LoggingFormatProvider();
string.Format(myLoggingProvider, "123: {0}", 123);

它对方法输出两个调用GetFormat

formatType: System.ICustomFormatter
formatType: System.Globalization.NumberFormatInfo

为什么有两个电话?

对于格式化类型,我通常会感到困惑。

Konamiman

调用时string.Format(myLoggingProvider, "123: {0}", 123),.NET首先询问您的实例LoggingFormatProvider是否可以提供自定义格式程序(即的实例ICustomFormatter)。由于它不能(返回null),并且要格式化的值是一个数字,因此它会回退到请求NumberFormatInfo实例

如果您的参数是的实例DateTime,那么您将获得对DateTimeFormatInfo实例的请求正如IFormatProvider的文档所建议的那样,数字和日期显然是您将获得这种后退的唯一参数类型

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章