如何让我的自己的方法在C#中使用复合格式相似的String.Format(How do I make

2019-06-27 07:35发布

我喜欢的String.Format如何使用论据,以它格式化字符串注入变量。 这就是所谓的复合格式化,并通过MSDN讨论这里 。

我想用我的日志门面此功能:

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的是谁resposible他们,现在看来似乎只是忽略了格式化参数,并没有给出“智能感知”的帮助。 这不是因为谁将会使用门面将期待这其他开发好。

如何获取参数的高亮和“智能感知”自定义格式的方法类似,这些如何工作:

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

任何帮助,将不胜感激。

Answer 1:

退房ReSharpers 外部注解 。 具体而言,要使用StringFormatMethodAttribute这一点。

使用外部注解居然有3种方法。 二,它阐述了,和一个你有字里行间看到的。

  1. 参考 “JetBrains.Annotations.dll”。 我不推荐这一个。 我不喜欢复制DLL,或者具有参考ReSharper的安装目录的想法。 这可能会导致问题,如果您升级或重新安装。

  2. 复制和粘贴属性声明到您的解决方案。 我建议这个,因为它给你更多的控制权。 此外,你可以摆脱ReSharper的(为什么会有人这样做?奇怪的事情已经发生了,我猜。),并仍然提供此功能的人,消耗你的图书馆。 有一步一步的指示,如何做到这一点的第一个链接。

  3. 创建一个XML文件,类似于它使用的.NET程序集。 我这样做是为Silverlight的单元测试框架。 ReSharper的默认不承认这些测试。

    去做这个

    1. 创建一个文件名为<assembly>.xml并把它放在“ReSharper的\ VXX \ BIN \ ExternalAnnotations”。
    2. 添加一个根元素"<assembly name="<assembly>">
    3. 现在添加<member>为你想给一个属性的每个成员的元素。

    我不建议这样做对你自己的代码。 但是,如果你有,你想拥有这个功能,但不能编辑装配,这是做它的方式。 这将只适用于您的计算机,并使用该组件将需要复制的xml文件每个开发上。



文章来源: How do I make my own method similar to String.Format using Composite Formatting in C#