用于创建带有命名空间声明的新C#类的VSCODE代码段

本文关键字:类的 VSCODE 代码 创建 命名空间 声明 用于 | 更新日期: 2023-09-27 18:20:26

现在我们只能创建新的filefolder。而且,每次创建类声明时都要编写名称空间,这非常烦人。

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

用于创建带有命名空间声明的新C#类的VSCODE代码段

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

自上次回答以来,Visual Studio代码发生了一些更改。它现在以片段形式提供变量TM_DIRECTORY,但这是一条绝对路径。我已经提交了一个增强请求,以提供一个可以转换为命名空间的相对路径。但老实说,我认为上面的扩展满足了我的需求(上下文菜单是一个优点)

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

您可以创建一个片段,让您输入名称空间和类名。但我想这对你没有多大帮助。尽管如此,它看起来是这样的:

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

如果您真的想要一个基于文件路径填写正确名称空间和类名的代码段,您可以查看OmniSharp项目。这可以让您了解如何改进csharp-o扩展,以便在插件中提供正确的数据作为建议。但我认为这是一项比自己键入名称空间和类更大的任务。

我发现这些扩展提供了创建C#类上下文菜单选项:

  • VS C的Sharper#
  • C#助手
  • C#模板扩展
  • HelloVS-C#新文件

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

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

因此项目#1在/your/projects/directory/Project1/
中项目#2在/your/projects/directory/Project2/
中等

以下代码段将为所有子目录创建一个命名空间实现:

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}",
        "{",
        "}"
    ]
}

Windows

"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. 该代码段匹配您的基本目录和最多十个子目录(第一个目录是强制性的(''/([^''/]+)),而所有额外的九个目录都是可选的(''/([^''/]+))?
  2. 然后使用第一个匹配的目录创建名称空间指令
  3. 对于每个成功的附加子目录匹配,插入具有该组的子匹配($4)的点.${3:+.});对于不成功的组,没有插入点,子匹配为空

享受:)

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

我没有找到任何现有的代码片段建议来生成正确的名称空间
经过一些尝试和错误后,我得到了最接近的,使用";变量";以及";占位符变换";,是:

    "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 + Backspacetab快速移除,然后再次跳到类的内部。

使用这个,首先它将焦点放在命名空间的末尾,以添加任何额外的部分。然后集中在课堂内部。

"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"
}