如何在C#中使用复合格式创建类似于String.Format的自己的方法

我喜欢String.Format如何使用参数将变量注入到它正在格式化的字符串中。 这称为Composite Formating,MSDN将在此处讨论。

我希望这个function与我的日志门面:

string foo = "fancy"; string bar = "message"; log.Debug("My {0} log {1}.", foo, bar) 

我的ILoggerFacade具有以下方法签名:

 void Debug(T message, params Object[] args); 

而且,我知道我可以非常简单地实现这一点:

 ILog m_Log = \\some logging implementation public void Debug(T message, params Object[] args) { m_Log.Debug(String.Format(message, args)); } 

但是,在Visual Studio中,我没有得到{0},{1},…参数的精彩突出显示:

复合格式化方法的参数突出显示

我想ReSharper对他们来说是可以接受的,而且似乎只是忽略了格式化参数而没有提供“intellisense”帮助。 这是不好的,因为将使用外观的其他开发人员将期待这一点。

如何为自定义格式化方法获取参数突出显示和“intellisense”,类似于以下方法:

 Console.WriteLine(...) String.Format(...) etc... 

任何帮助,将不胜感激。

查看ReSharpers 外部注释 。 具体来说,您要为此使用StringFormatMethodAttribute 。

要使用外部注释,实际上有3种方法。 两个它拼出来的,一个你必须在线之间阅读才能看到。

  1. 参考“JetBrains.Annotations.dll”。 我建议不要这样做。 我不喜欢复制DLL或不必引用ReSharper安装目录的想法。 如果升级或重新安装,这可能会导致问题。

  2. 将属性声明复制并粘贴到解决方案中。 我推荐这个,因为它可以让你更有控制力。 另外,你可以摆脱ReSharper(为什么有人会这样做?我想,发生了奇怪的事情。),并且仍然为任何消耗你的库的人提供这个function。 有关如何在第一个链接中执行此操作的分步说明。

  3. 创建一个XML文件,类似于它用于.NET程序集的文件。 我为Silverlightunit testing框架做了这个。 ReSharper默认不识别这些测试。

    去做这个

    1. 创建文件名.xml并将其放在“ReSharper \ vXX \ Bin \ ExternalAnnotations”中。
    2. 添加根元素"
    3. 现在为要为其提供属性的每个成员添加元素。

    我不建议您为自己的代码执行此操作。 但是,如果您有一个想要具有此function但无法编辑的程序集,则可以使用此方法。 这仅适用于您的计算机,并且使用该程序集的每个开发人员都需要复制xml文件。