2013-02-20 85 views
0

我有指定自定义格式,基本上是这样的:的String.Format()调用没有自定义格式

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我有遗漏吗?

+0

什么'PARAMETER_的价值' - 你最终会得到一个格式字符串,它实际上有任何参数(如'{0}')吗?这是否意味着'!Equals',意味着如果你的格式化程序没有处理这个值,那么这意味着提前退出? – shambulator 2013-02-20 20:49:42

+0

对不起,是一个错字。问题在于,'!Equals'这一行永远不会被忽略。 'string.Format()'不会调用格式化程序。 – code4life 2013-02-20 20:52:56

+1

在您的来电'string.Format',什么是第二个参数(您的格式字符串)的值?如果没有格式化占位符,我不希望格式化程序被调用。空字符串的默认值看起来不太有希望。 – shambulator 2013-02-20 20:54:00

回答

1

如果参数没有{0},然后格式化不会破点

这将断点

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

这不会

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

当调用的String.Format(的IFormatProvider提供商,字符串格式,params对象[]参数)的第二个参数格式HAST被指定为一个有效的格式字符串即它不能为空。

尝试设置PARAMETER_到类似“{0}”,那么它应该工作。