c# - Visual Studio 代码片段重构

标签 c# visual-studio code-snippets

我创建了以下简单的代码片段

<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets
    xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>Observable Property</Title>
      <Description>Generates an Observable property based on type and Name</Description>
      <Shortcut>nosp</Shortcut>
    </Header>

    <Snippet>
      <Declarations>
        <Literal>
          <ID>PropertyName</ID>
          <ToolTip>Defines the Property Name</ToolTip>
          <Default>Name</Default>
        </Literal>
        <Literal>
          <ID>PropertyType</ID>
          <Type>Type</Type>
          <ToolTip>Defines the Property Type</ToolTip>
          <Default>String</Default>
        </Literal>
      </Declarations>
      <Code Language="csharp">
        <![CDATA[
        public $PropertyType$ $PropertyName$
        {
            get { return Get<$PropertyType$>("$PropertyName$"); }
            set
            {
                Set("$PropertyName$", value);
            }
        }               
        ]]>
      </Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>

并且它按预期工作,例如创建

    public VirtualKeyCode Key
    {
        get { return Get<VirtualKeyCode>("Key"); }
        set
        {
            Set("Key", value);
        }
    }

在最初插入代码片段后(例如在重构期间)更改其中一个位置时,是否可以更改所有 $PropertyType$ 位置?

最佳答案

没有。片段只是生成文本的快速方法。一旦插入,VS 就会丢失所有关于它的知识和上下文。当然,您可以简单地使用正确的类型重新插入代码片段,但任何重构都无法知道代码来自代码片段。

如果你感觉特别雄心勃勃,你可以尝试写一个 Roslyn跟踪哪些代码部分来自片段变量的扩展,并进行片段感知重构来更改所有变量实例。即便如此,这也无法跨 session 工作,除非您使用注释制作片段标记代码(//snippet: Observable Property),或者(如果您感觉真的雄心勃勃) )您主动将代码与片段进行匹配,无论它们最初是否来自片段,并对匹配的树进行操作。虽然功能强大,但如果有人真的试图仅更改部分代码,它可能会导致意外。

...所以简短的回答是否定的。

关于c# - Visual Studio 代码片段重构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39611816/

相关文章:

c# - 如何访问我只需要在 Application.Start 上创建一次的变量

C#检查字符是否为标记的方法

c++ - 访问冲突读取位置 0xfeef002A

r - 我可以更改 RStudio 保存片段的位置吗?

c++ - 如何在 C++ 中创建单词/句子输出的随机机会

c# - 如何从 Windows 服务调用我的 dll?

C# 返回一个变量子类的列表?

.net - 有没有办法捕获powershell脚本中exe文件抛出的异常?

visual-studio - VS2010 和 Windows XP SP3

latex - 如何在投影仪演示中包含代码片段?