【问题标题】:How can I make all of the IDisposable classes colored differently in the Visual Studio IDE?如何在 Visual Studio IDE 中使所有 IDisposable 类的颜色不同?
【发布时间】:2009-07-27 16:02:11
【问题描述】:

标题涵盖了一切。我希望实现 IDisposable 的类以特定颜色显示,这样我就可以知道是否应该将它们包装在 using 块中。是否有可以扩展 IDE 的设置或过程?

【问题讨论】:

    标签: c# visual-studio ide


    【解决方案1】:

    我认为一旦 Roslyn 出现,这将变得更容易/无需扩展,但这目前并不容易,因为您无法轻松地从扩展中访问 C# 代码。

    在 Resharper 中,这很简单!我的示例在 ReSharper 9.0 中进行了测试。可悲的是,没有简单的方法可以将其提供给您。

    • 扩展 -> Resharper -> 选项 -> 代码检查 -> 自定义模式 -> 添加,弹出对话框
    • 选择 C#(左上角)
    • 选择“查找”(右上角)
    • 添加new $disp$($args$)的模式
    • 模式严重性:显示为建议
    • 描述:一次性结构
    • “添加占位符”类型:Type,名称:disp,类型:System.IDisposable
    • “添加占位符”类型:Arguments,名称:args

    保存,您现在将在构建新的一次性用品时收到“建议”。

    添加模式$disp$ $var$ = $exp$; 也可能会有所帮助。

    • “添加占位符”类型:Type,名称:disp,类型:System.IDisposable
    • “添加占位符”类型:Expression,名称:exp
    • “添加占位符”类型:Identifier,名称:var

    【讨论】:

    • 很好的解决方法,但不如为 IDisposable 类型的变量/表达式使用特殊颜色好,因为它看起来好像所有创建一次性用品的情况都是错误的。提交的 R# 功能请求:youtrack.jetbrains.com/issue/RSRP-472248
    • 谢谢。只是我怀疑在此之外,您描述了$args$,而错过了提及$var$?抱歉打扰了,我是新来的。
    • @T.Todua 我确实错过了。谢谢!现已修复。
    【解决方案2】:

    当然可以做到这一点,尽管它不像更改设置那么简单。您需要编写一个 Visual Studio 插件来完成此操作。

    访问http://msdn.microsoft.com/en-us/vsx/bb980955.aspx 开始使用。正如其他人会指出的那样。这不适合胆小的人。

    这里有一个链接可能会指向您正在寻找的内容:http://msdn.microsoft.com/en-us/library/bb166778.aspx

    【讨论】:

    【解决方案3】:

    你不能。这将需要语言服务支持,而 C# 或 VB.Net 均不提供此功能。

    “不能”这个词可能太强了。当然可以使用插件来执行此操作,该插件对代码进行深入检查并找出层次结构。然而,这是一项非常重要的任务。

    【讨论】:

      【解决方案4】:

      我不确定 FXCop 或 StyleCop 是否已经可以做到这一点。但是,这将是一个编译后的建议/警告。

      我猜是 Resharper 建议的。

      【讨论】:

        【解决方案5】:

        当然,有很多工具可以构建 VS 扩展,see Visual Studio 2008 SDK 1.1 但是构建此类加载项所需的时间将需要您花费更多时间来浏览组件并确定它们是否是一次性的

        【讨论】:

          【解决方案6】:

          大街上的字是这种东西会be much easier in VS.NET 2010。编辑器正在 WPF 中重写。

          【讨论】:

            【解决方案7】:

            也许我这样做是个坏人,但我最近一直在使用这段代码:

            public static void BulkDispose(object[] objects)
            {
              foreach (object o in objects)
              {
                if (o != null)
                {
                  if (o is IDisposable)
                  {
                    IDisposable disposable = o as IDisposable;
                    disposable.Dispose();
                  }
                }
              }
            }
            

            【讨论】:

            • Dispose 抛出异常(“已经释放”)并不罕见,因此您希望每个 dispose 调用都包含在 try/catch 中。
            • 处置应该永远因为多次调用而抛出。如果是这样,则有问题的组件不符合 IDisposable 合同。参见备注下的msdn.microsoft.com/en-us/library/…:“如果多次调用其 Dispose 方法,该对象不得抛出异常。”
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-12-10
            • 2014-06-17
            • 1970-01-01
            • 2012-08-22
            • 1970-01-01
            • 1970-01-01
            • 2023-03-18
            相关资源
            最近更新 更多