String.Format()不调用自定义格式化程序

时间:2013-02-20 20:38:15

标签: c# string-formatting

我指定了一个自定义格式化程序,基本上是这样的:

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是否有些微妙之处?

2 个答案:

答案 0 :(得分:1)

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

尝试将parameter_设置为“{0}”,然后它应该可以正常工作。

答案 1 :(得分:1)

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

这将是断点

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

这不会

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