我创建了以下简单的代码片段
<?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/