gpt4 book ai didi

c# - 为什么 `GetFormat` 被调用了两次?

转载 作者:行者123 更新时间:2023-11-30 23:02:36 25 4
gpt4 key购买 nike

我有一个 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 实例的请求反而。数字和日期显然是您将获得这种回退的唯一参数类型,如 the documentation for IFormatProvider似乎暗示。

关于c# - 为什么 `GetFormat` 被调用了两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50394503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com