gpt4 book ai didi

c# - 如何在 C# 中使用 Composite Formatting 使我自己的方法类似于 String.Format

转载 作者:IT王子 更新时间:2023-10-29 04:27:23 33 4
gpt4 key购买 nike

我喜欢 String.Format 如何使用参数将变量注入(inject)到它正在格式化的字符串中。这称为复合格式,由 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}、... 参数进行花哨的突出显示:

Argument highlighting for Composite Formatting methods

我猜是 ReSharper 对它们负责,它似乎只是忽略了格式参数并且没有提供任何“智能感知”帮助。这并不好,因为将使用外观的其他开发人员会期待这一点。

如何为自定义格式的方法获取参数突出显示和“智能感知”,类似于这些工作方式:

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

如有任何帮助,我们将不胜感激。

最佳答案

查看 ReSharpers External Annotations .具体来说,您想使用 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 文件。

关于c# - 如何在 C# 中使用 Composite Formatting 使我自己的方法类似于 String.Format,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12092245/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com