我有一个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
为什么有两个电话?
对于格式化类型,我通常会感到困惑。
调用时string.Format(myLoggingProvider, "123: {0}", 123)
,.NET首先询问您的实例LoggingFormatProvider
是否可以提供自定义格式程序(即的实例ICustomFormatter
)。由于它不能(返回null
),并且要格式化的值是一个数字,因此它会回退到请求NumberFormatInfo实例。
如果您的参数是的实例DateTime
,那么您将获得对DateTimeFormatInfo实例的请求。正如IFormatProvider的文档所建议的那样,数字和日期显然是您将获得这种后退的唯一参数类型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句