如何创建一个自定义模式来替换在Resharper中使用直接强制转换的`as`强制转换?

时间:2013-05-10 16:53:22

标签: c# .net refactoring resharper resharper-7.1

我有很多像这样的代码:

ml = this.CriteriaList.ItemByName(SC_STATIONS) as MultiList;

我想用

替换它
ml = (MultiList) this.CriteriaList.ItemByName(SC_STATIONS);

为此,我进入了Resharper选项,选择了自定义模式并创建了一个具有以下搜索模式的新模式:

`$expr1$ as $type1$;`

expr1表示表达式,type1表示类型。替换模式为($type1$) $expr1$;

问题是Resharper从未发现任何与此自定义模式匹配的内容 我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

虽然不在ReSharper上,但仍可以使用。

打开Visual Studio替换窗口(CTRL + H),打开使用正则表达式选项并使用以下术语:

  • 查找:(.*)(\s|\((?!\))|\=)(.+) as (\w+)(\).*|;)
  • 替换:$1$2($4)$3$5

注意:如果您使用的是VS2010,则应使用{}代替()\代替$。去图......

答案 1 :(得分:1)

这个Resharper Custom Pattern似乎可以做你想要的:

enter image description here

我用来测试这种模式的小程序是:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var b = FooFactory() as bar;
        }

        static private foo FooFactory()
        {
            return new foo();
        }
    }

    class foo {}

    class bar : foo {}
}

它应该在FooFactory() as bar下放置一条摆动线,为您提供用(bar)FooFactory()替换它的选项

在此自定义模式上添加var ml = CriteriaList.ItemByName(SC_STATIONS) as MultiList;并执行“立即搜索”,即可获得此信息:

enter image description here

相关问题