Resharper结构查找和更换

Resharper结构查找和更换,resharper,resharper-6.0,structural-search,Resharper,Resharper 6.0,Structural Search,我希望在遗留代码库中替换大量重复代码,并发现Resharper的代码非常适合此任务。然而,我有问题,使它符合我的模式 我希望快速修复的模式是: public string PropertyName { get { return base.GetSubNode(_parameterNode, "ElementName").InnerText; } set { base.GetSubNode(_parameterNode, "ElementName").InnerText = val

我希望在遗留代码库中替换大量重复代码,并发现Resharper的代码非常适合此任务。然而,我有问题,使它符合我的模式

我希望快速修复的模式是:

public string PropertyName
{
    get { return base.GetSubNode(_parameterNode, "ElementName").InnerText; }
    set { base.GetSubNode(_parameterNode, "ElementName").InnerText = value; }
}
它将被替换为:

public string PropertyName
{
    get { return GetProperty("ElementName"); }
    set { SetProperty("ElementName", value); }
}
我创建了一个模式:

public string $propName$
{
    get { return base.GetSubNode(_parameterNode, $elementName$).InnerText; }
    set { base.GetSubNode(_parameterNode, $elementName$).InnerText = value; }
}
如果我进行搜索,则模式匹配,但不会导致快速修复可用。如果我改为为为getter和setter创建一个单独的模式,我会得到快速修复,但是getter模式与getter和setter都匹配

getter模式:

base.GetSubNode(_parameterNode, $elementName$).InnerText

如何快速修复此getter/setter对?

以下搜索/替换模式就像ReSharper 6.1中的一个符咒:

    <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    <s:Boolean x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/@KeyIndexDefined">True</s:Boolean>
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/Comment/@EntryValue">GetSubNode calls in property accessors</s:String>
    <s:Boolean x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/FormatAfterReplace/@EntryValue">False</s:Boolean>
    <s:Boolean x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/IsReplacePattern/@EntryValue">True</s:Boolean>
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/LanguageName/@EntryValue">CSHARP</s:String>
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/ReplaceComment/@EntryValue">Replace GetSubNode with GetProperty or SetProperty call</s:String>
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/ReplacePattern/@EntryValue">public string $propName$&#xD;
{&#xD;
    get { return GetProperty($elementName$); }&#xD;
    set { SetProperty($elementName$, value); }&#xD;
}&#xD;
</s:String>
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/SearchPattern/@EntryValue">public string $propName$&#xD;
{&#xD;
    get { return base.GetSubNode(_parameterNode, $elementName$).InnerText; }&#xD;
    set { base.GetSubNode(_parameterNode, $elementName$).InnerText = value; }&#xD;
}&#xD;
</s:String>
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/Severity/@EntryValue">SUGGESTION</s:String>
    <s:Boolean x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/ShortenReferences/@EntryValue">False</s:Boolean>
    <s:Boolean x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/CustomPatternPlaceholder/=elementName/@KeyIndexDefined">True</s:Boolean>
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/CustomPatternPlaceholder/=elementName/Properties/=Maximal/@EntryIndexedValue">-1</s:String>
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/CustomPatternPlaceholder/=elementName/Properties/=Minimal/@EntryIndexedValue">-1</s:String>
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/CustomPatternPlaceholder/=elementName/Type/@EntryValue">ArgumentPlaceholder</s:String>
    <s:Boolean x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/CustomPatternPlaceholder/=propName/@KeyIndexDefined">True</s:Boolean>
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/CustomPatternPlaceholder/=propName/Properties/=CaseSensitive/@EntryIndexedValue">True</s:String>
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/CustomPatternPlaceholder/=propName/Properties/=ExactType/@EntryIndexedValue">False</s:String>
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/CustomPatternPlaceholder/=propName/Properties/=RegEx/@EntryIndexedValue"></s:String>
    <s:String x:Key="/Default/PatternsAndTemplates/StructuralSearch/Pattern/=B4B745BE8847784E9BF34E217AEB9C3B/CustomPatternPlaceholder/=propName/Type/@EntryValue">IdentifierPlaceholder</s:String></wpf:ResourceDictionary>

真的
属性访问器中的GetSubNode调用
假的
真的
CSHARP
用GetProperty或SetProperty调用替换GetSubNode
公共字符串$propName$
;
{
;
获取{return GetProperty($elementName$);}
;
set{SetProperty($elementName$,value);}
;
}
;
公共字符串$propName$
;
{
;
获取{return base.GetSubNode(_parameterNode,$elementName$).InnerText;}
;
set{base.GetSubNode(_parameterNode,$elementName$).InnerText=value;}
;
}
;
暗示
假的
真的
-1
-1
参数占位符
真的
真的
假的
标识定位器

将其保存到.dotsettings文件中,并通过ReSharper>管理选项>[图层名称]>导入/导出设置>从文件导入导入导入导入到ReSharper安装中

结构搜索和替换似乎已完成。这就解释了为什么完整属性模式不能带来快速修复。我仍然希望有一种方法可以分别对getter和setter应用快速修复。VS Find and Replace在这里可能就足够了,明智地使用它的regex支持。@AakashM-True,但我更愿意一次替换一段庞大的代码库,因为测试最多也不需要,有一个快速修复会让它变得非常简单。这也是我们学习如何使用结构查找和替换功能的一个好机会。find的以下表达式:“return.*GetSubNode(\u参数节点,\“{(.*)}\”).InnerText;”,而replace的这个表达式:“return GetProperty(\1”);”)将适用于我的getter。我仍然喜欢学习更多关于结构搜索和替换的知识。奇怪的是,我可以发誓我的模式是一样的,但这一个有效。谢谢你的帮助,谢谢你的好产品!