一串Format()未调用自定义格式化程序

本文关键字:自定义 格式化 程序 调用 Format 一串 | 更新日期: 2023-09-27 18:00:22

我指定了一个自定义格式化程序,基本上如下所示:

public class NotationNumericFormatter : IFormatProvider, ICustomFormatter
{
    public object GetFormat(Type formatType_)
    {
      return (formatType_ == typeof(ICustomFormatter) ? this : null;
    }
    public string Format(string format_, object arg_, IFormatProvider formatProvider_)
    {
       if (!Equals(formatProvider_) || arg_ == null)  // <-- I put a breakpoint here...
       {
         return;
       }
       // then a bunch of stuff happens here.
    }
}

现在困扰我的是,以下代码:

// _myFormatter is a NotationNumericFormatter which gets instanced 
// in the ctor of the class in question.
var result = string.Format(_myFormatter, (parameter_ ?? "").ToString(), value_);

它永远不会碰到格式化程序的Format()方法中的第一行。我在这里错过了什么?string.Format是否有我遗漏的微妙之处?

一串Format()未调用自定义格式化程序

如果参数没有{0},则格式化程序不会中断

这将中断

var result = string.Format(_myFormatter, "{0}", value_);

这不会是

var result = string.Format(_myFormatter, "", value_);

当您调用String时。Format(IFormatProvider提供程序,字符串格式,paramsObject[]参数)第二个参数格式必须指定为有效的格式字符串,即不能为空。

请尝试将parameter_设置为类似于"{0}"的值,这样就可以工作了。