我喜欢String.Format如何使用参数将变量注入到它正在格式化的字符串中。这称为复合格式,由MSDN here讨论。
我希望这个功能与我的日志门面:
string foo = "fancy";
string bar = "message";
log.Debug("My {0} log {1}.", foo, bar)
我的ILoggerFacade具有以下方法签名:
void Debug<T>(T message, params Object[] args);
而且,我知道我可以很简单地实现这一点:
ILog m_Log = \\some logging implementation
public void Debug<T>(T message, params Object[] args)
{
m_Log.Debug(String.Format(message, args));
}
但是,在Visual Studio中,我没有得到{0},{1},...参数的精彩突出显示:
我想是ReSharper对他们负责,看起来它只是忽略了格式化参数而没有提供“intellisense”帮助。这是不好的,因为将使用外观的其他开发人员将期待这一点。
如何为自定义格式化方法获取参数突出显示和“intellisense”,类似于以下方法:
Console.WriteLine(...)
String.Format(...)
etc...
任何帮助都将不胜感激。
答案 0 :(得分:29)
查看ReSharpers External Annotations。具体来说,您希望使用StringFormatMethodAttribute。
要使用外部注释,实际上有3种方法。两个它拼出来的,你需要在两行之间阅读。
参考“JetBrains.Annotations.dll”。我建议不要这样做。我不喜欢复制DLL或必须引用ReSharper安装目录的想法。如果您升级或重新安装,这可能会导致问题。
将属性声明复制并粘贴到您的解决方案中。我推荐这个,因为它可以让你更有控制力。另外,你可以摆脱ReSharper(为什么有人会这样做?我想,发生了奇怪的事情。),并且仍然为消耗你的库的任何人提供这个功能。有关如何在第一个链接中执行此操作的分步说明。
创建一个XML文件,类似于它用于.NET程序集的文件。我为Silverlight单元测试框架做了这个。 ReSharper默认不识别这些测试。
要做到这一点
<assembly>.xml
并将其放入“ReSharper \ vXX \ Bin \ ExternalAnnotations”。"<assembly name="<assembly>">
<member>
个元素。我不建议您为自己的代码执行此操作。但是,如果您有一个要获得此功能但无法编辑的程序集,则可以使用此方法。这仅适用于您的计算机,并且使用程序集的每个开发人员都需要复制xml文件。