【问题标题】:VSCODE snippet for creating new C# class with namespace declaration用于创建具有命名空间声明的新 C# 类的 VSCODE 片段
【发布时间】:2015-11-02 19:47:59
【问题描述】:

目前我们只能创建新的filefolder。而且每次创建类声明都要写命名空间很烦人。

但是是否可以创建新的 C# 类文件,其中包含自动生成的适当命名空间?或者那里有一些sn-p?

【问题讨论】:

    标签: c# visual-studio-code


    【解决方案1】:

    我发现了这些提供创建 C# 类功能的扩展:

    【讨论】:

      【解决方案2】:

      This extension 提供了一个上下文菜单按钮来添加一个新类,该类将自动填充命名空间。

      自上次回答以来,Visual Studio Code 发生了一些变化。它现在在 sn-ps 中提供变量TM_DIRECTORY,但这是一个绝对路径。我已提交 an enhancement request 以提供可以转换为命名空间的相对路径。但老实说,我认为上述扩展满足了我的需求(上下文菜单是一个加号)

      【讨论】:

      • 扩展现在是:***** 项目不再在开发中 *****.
      • 更多提供上下文菜单按钮解决方案的扩展,见my answer
      【解决方案3】:

      使用 vscode 的当前变量和正则表达式系统的中度脏解决方案如下:

      假设您的所有项目都在 /your/projects/directory/

      所以项目 #1 位于 /your/projects/directory/Project1/
      项目 #2 位于 /your/projects/directory/Project2/
      等等

      下面的 sn-p 将为所有子目录创建一个命名空间实现:

      Linux/MacOS

      "Namespace declaration":
      {
          "prefix": "name",
          "description": "Creates a new namespace declaration.",
          "body":
          [
              "namespace ${TM_DIRECTORY/^\\/your\\/projects\\/directory(\\/([^\\/]+))(\\/([^\\/]+))?(\\/([^\\/]+))?(\\/([^\\/]+))?(\\/([^\\/]+))?(\\/([^\\/]+))?(\\/([^\\/]+))?(\\/([^\\/]+))?(\\/([^\\/]+))?(\\/([^\\/]+))?/$2${3:+.}$4${5:+.}$6${7:+.}$8${9:+.}$10${11:+.}$12${13:+.}$14${15:+.}$16${17:+.}$18${19:+.}$20/gi}",
              "{",
              "}"
          ]
      }
      

      窗口

      "Namespace declaration":
      {
          "prefix": "name",
          "description": "Creates a new namespace declaration.",
          "body":
          [
              "namespace ${TM_DIRECTORY/^c:\\\\your\\\\projects\\\\directory(\\\\([^\\\\]+))(\\\\([^\\\\]+))?(\\\\([^\\\\]+))?(\\\\([^\\\\]+))?(\\\\([^\\\\]+))?(\\\\([^\\\\]+))?(\\\\([^\\\\]+))?(\\\\([^\\\\]+))?(\\\\([^\\\\]+))?(\\\\([^\\\\]+))?/$2${3:+.}$4${5:+.}$6${7:+.}$8${9:+.}$10${11:+.}$12${13:+.}$14${15:+.}$16${17:+.}$18${19:+.}$20/gi}",
              "{",
              "}"
          ]
      }
      

      说明

      1. sn-p 匹配您的基本目录和最多十个子目录(第一个目录是必需的(\\/([^\\/]+)),而所有其他九个都是可选的(\\/([^\\/]+))?
      2. 然后使用第一个匹配的目录创建命名空间指令
      3. 对于每个成功的附加子目录匹配,插入一个点 . (${3:+.}) 和该组的子匹配 ($4);对于不成功的组,不插入点并且子匹配为空

      享受:)

      【讨论】:

        【解决方案4】:

        目前这是不可能的。您无法在 Visual Studio Code 的 sn-p 声明文件中检索当前文件名、目录或其他信息。

        您可以创建一个允许您输入命名空间和类名的 sn-p。但我想这对你没有多大帮助。尽管如此,它看起来像这样:

         "Namespace and class": {
            "prefix": "namespaceAndClass",
            "body": [
                "namespace $1",
                "{",
                "   class $2",
                "   {",
                "",
                "   }",
                "}"
            ],
            "description": "Create a namespace block with a class"
         }
        

        如果您真的想要一个根据文件路径填充正确命名空间和类名的 sn-p,您可以查看 OmniSharp project。这可以让您了解如何改进 csharp-o 扩展,以便从插件中提供正确的数据作为建议。 但我认为这是一项比你自己输入命名空间和类要大得多的任务。

        【讨论】:

          【解决方案5】:

          使用这个,首先它集中在命名空间的末尾添加任何额外的部分。然后它集中在类中。

          "Namespace and Class": {
              "prefix": "nc",
              "body": [
                  "namespace $WORKSPACE_NAME$1\n{\n\tpublic class $TM_FILENAME_BASE\n\t{\n\t\t$2\n\t}\n}"
              ],
              "description": "Generates namespace and class name"
          }
          

          【讨论】:

            【解决方案6】:

            发现此线程正在寻找相同的答案。

            我没有找到任何现有的 sn-p 建议来生成正确的命名空间。
            经过反复试验,我使用“variables”和“placeholder transformation”得到的最接近的是:

                "Namespace and Class": {
                    "prefix": "nclass",
                    "body": [
                        "namespace ${RELATIVE_FILEPATH/[\\\\]|\\w+\\.cs$/./g}$1",
                        "{",
                        "\tpublic class $TM_FILENAME_BASE\n\t{\n\t\t$0\n\t}",
                        "}"
                    ],
                    "description": "Generates namespace and class name"
                }
            

            这将从工作空间中的文件夹结构生成命名空间,并使用文件名生成类名。

            然而,这有一个问题,因为它会在命名空间的末尾留下两个尾随 ..。 但是光标会停在那里,因此可以使用Ctrl + Backspace 快速删除它们,然后再次使用tab 跳转到类的主体内。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-06-14
              • 2020-02-15
              • 2012-02-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-09-12
              相关资源
              最近更新 更多