【问题标题】:Automatically Add Regions to Code in Visual Studio在 Visual Studio 中自动将区域添加到代码中
【发布时间】:2012-11-14 02:12:17
【问题描述】:

我的团队非常喜欢使用区域,考虑到这一点,它几乎已成为我们代码中的事实标准。我最近意识到,每次创建类、测试方法等时,我都厌倦了编写或 ctrl+c / ctrl+v'ing 这些...

我想知道是否可以(通过宏或其他一些功能)让 Visual Studio 自动将这些添加到您的代码中。

例如,如果我在我的项目中添加了一个新的类文件,你能否执行某种魔法让 Visual Studio 将文件生成为:

namespace Test
{
    class MyClass
    {
        #region ------------ members --------------
        #endregion

        #region ------------ properties --------------
        #endregion

        #region ------------ methods --------------
        #endregion
    }
}

当我正在编写单元测试时,我真正对目前不知道如何执行此操作感到恼火。这可能有点棘手,但我试图找到一种方法将 --set up----run test-- 区域自动添加到测试方法中,因为我们的团队坚持使用它们。

所以,当我去创建一个新的测试方法时

[TestMethod]
public void WhenCondition_WillProduceExpectedResult()
{
}

Visual Studio 会自动将这两个区域添加到方法中,例如:

[TestMethod]
public void WhenCondition_WillProduceExpectedResult()
{
   #region ------------- set up -------------
   #endregion 

   #region ------------- run test -------------
   #endregion 
}

不确定这是否可以做到,如果可以,是否可以通过 vs-macro 或扩展。非常感谢任何帮助!

【问题讨论】:

  • 区域是一种非常糟糕的代码气味。如果你需要区域,那么你的类可能太大了。
  • 我发现 Ctrl C 和 Ctrl V 非常有用 ;-)
  • @Dennis 区域无法编译。它们只是为了可读性和组织性,代码味道如何?
  • @Amicable 由本网站的创建者之一杰夫·阿特伍德 (Jeff Atwood) 阅读:codinghorror.com/blog/2008/07/…
  • 无论我喜欢或不喜欢区域,重要的是我是一个将它们作为标准的团队的成员。

标签: c# visual-studio-2010 region visual-studio-macros


【解决方案1】:

您可以创建一个简单的代码 sn-p,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets
    xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>Simple</Title>
      <Shortcut>simple</Shortcut>
      <SnippetTypes>
        <SnippetType>Expansion</SnippetType>
      </SnippetTypes>
    </Header>
    <Snippet>
      <Declarations>
        <Literal>
          <ID>name</ID>
          <ToolTip>Replace with the name of the action</ToolTip>
          <Default>Action</Default>
        </Literal>
      </Declarations>
      <Code Language="csharp">
        <![CDATA[
        public void $name$()
        {
            #region ------------- set up -------------
            #endregion 

            #region ------------- run test -------------
            #endregion 
        }
        ]]>
      </Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>

将该文件保存到C:\Users\&lt;your_user&gt;\Documents\Visual Studio 2010\Code Snippets\Visual C#\My Code Snippets

现在您只需要重新打开 Visual Studio,在类中输入“simple”并按两次 Tab 键。

【讨论】:

  • +1 用于解决 OP 的问题。当然,将坏习惯自动化会使最终摆脱它们变得更加困难。
  • ReSharper "Remove region/endregion in solution" 将自动消除这种不良习惯,以及类似 StyleCop 的规则,即不使用区域。 :)
【解决方案2】:

我知道的两种方式:

按照这个MSDN guide创建一个sn-p。

下载具有“环绕”功能的 Visual Studio 扩展 Productivity Power Tools。这围绕着用户使用选定的 sn-p 进行的选择,例如 #region #endregion 或 if 语句。

【讨论】:

    【解决方案3】:

    不知道为什么这么多人公开反对地区;他们帮助我很容易地对我的代码进行分类。我使用的是放置在我的一个键盘按钮上的宏,它会自动为我插入区域。我可以给你的一个提示是,如果可能的话,在每次按键之间放一点延迟,因为 VS 有时会错过字符。

    希望这会有所帮助!

    【讨论】:

    • 你能分享你偶然使用的宏吗?
    【解决方案4】:

    使用下面的sn-p

    <?xml version="1.0" encoding="utf-8" ?>
    <CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
      <CodeSnippet Format="1.0.0">
        <Header>
          <Title>#Classregion</Title>
          <Shortcut>#Classregion</Shortcut>
          <Description>Code snippet for #Classregion</Description>
          <Author>Author Name</Author>
          <SnippetTypes>
            <SnippetType>Expansion</SnippetType>
            <SnippetType>SurroundsWith</SnippetType>
          </SnippetTypes>
        </Header>
        <Snippet>
          <Declarations>
            <Literal>
              <ID>name</ID>
              <ToolTip>Region name</ToolTip>
              <Default>MyRegion</Default>
            </Literal>
          </Declarations>
          <Code Language="csharp">
            <![CDATA[
            #region ------------- Members ---------------
            $selected$ $end$
        #endregion
    
      #region --------------- Properties ---------------
            $selected$ $end$
        #endregion
    
      #region --------------- Methods ---------------
            $selected$ $end$
        #endregion
        ]]>
          </Code>
        </Snippet>
      </CodeSnippet>
    </CodeSnippets>
    

    将其保存在 C:\Users\\Documents\Visual Studio 2010\Code Snippets\Visual C#\My Code Snippets 下

    稍后它可以在 C# 代码中访问,方法是右键单击 > 插入片段 > 我的代码片段 > #Classregion

    【讨论】:

      【解决方案5】:

      如果您有 Resharper,那么“文件结构”窗口对于管理区域非常方便,允许简单的拖放以移动方法/属性块等。它显示您的区域(可折叠)并与主代码视图同步:

      https://www.jetbrains.com/help/resharper/Reference__Windows__File_Structure_Window.html

      例如,此处显示了一个名为 preview 的区域:

      【讨论】:

        【解决方案6】:

        我更喜欢按照 Sam Harwell 的回答中的描述编辑类模板:

        https://stackoverflow.com/a/2072717

        您可以在 Visual Studio 版本的类模板位置打开 class.cs 文件。例如,Visual Studio 2017 Enterprise 的位置是:

        C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class\Class.cs

        我使用文本编辑器打开该文件并向其中添加区域。然后将使用区域创建所有新类。

        【讨论】:

          【解决方案7】:

          我同意区域 a 是一个坏主意,但对每个人来说都是一个坏主意。

          您可能想看看NArrange

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-04-08
            • 1970-01-01
            • 1970-01-01
            • 2013-08-29
            • 1970-01-01
            • 2018-06-13
            • 1970-01-01
            • 2011-02-24
            相关资源
            最近更新 更多