如何在 Visual Studio 中反转等号周围的代码?

问题描述 投票:0回答:8

编写代码以从对象填充文本框后,例如:

txtFirstName.Text = customer.FirstName;
txtLastName.Text = customer.LastName;
txtAddress.Text = customer.Address;
txtCity.Text = customer.City;

在 Visual Studio(或者甚至像 Resharper 之类的东西)中是否可以将此代码复制并粘贴到保存函数中,并反转等号周围的代码,以便它看起来像:

customer.FirstName = txtFirstName.Text;
customer.LastName = txtLastName.Text;
customer.Address = txtAddress.Text;
customer.City = txtCity.Text;
c# visual-studio-2008
8个回答
80
投票

VS2012之前:

  • 复制并粘贴原始代码块
  • 在要切换的地方再次选择
  • 按 Ctrl-H 调出“替换”框
  • 在“查找内容”下输入:
    {[a-zA-Z\.]*} = {[a-zA-Z\.]*};
  • 在“替换为”下输入:
    \2 = \1;
  • 查看:“选择”
  • 使用:“正则表达式”
  • 点击全部替换

对于使用 .NET 正则表达式的 VS2012(大概是更高版本):

  • 复制并粘贴原始代码块
  • 在要切换的地方再次选择
  • 按 Ctrl-H 调出“替换”框
  • 在“查找内容”下输入:
    ([a-zA-Z\.]*) = ([a-zA-Z\.]*);
  • 在“替换为”下输入:
    ${2} = ${1};
  • 确保选择了
    .*
    (正则表达式)图标(替换文本框下方的第三个图标)
  • 点击全部替换

4
投票

据我所知没有。当然,如果您使用多种可用的绑定方法之一,那么您就不必这样做 - 绑定将在两个方向上进行更新(包括通过通知进行更改)。

对于 winform 来说:

txtFirstName.DataBindings.Add("Text", customer, "FirstName");

等等


2
投票

我有同样的需求,但在约翰提供的解决方案中我必须接受比

a-zA-Z\.
更多的字符,所以我稍微修改了它的常规异常,如下所示:

查找内容:

{^[^\=]*} = {.*}

替换为:

\2 = \1

这将反转线上找到的第一个等号周围的任何东西


0
投票
首先使用 Resharper 将它们放入其中的一个选项是定义一个类似于以下内容的实时模板:

$uiElement$ = $dto$; $dto$ = $uiElement$;

这将允许您输入一次,它会为您复制它,然后您可以将保存版本剪切并粘贴到其他方法。


0
投票
对我有用的

搜索词正则表达式:

搜索

([^= ]*) = ([^= ]*);


    


0
投票
死线程,但到达这里,所以我想我应该补充一下,ReSharper 在 2016 年左右添加了这个,因为它是一个相当常见的附加组件。

来源:

https://resharper-support.jetbrains.com/hc/en-us/community/posts/206688445-Reversing-Assignments

TL;博士。如果您有 ReSharper,请突出显示该块并使用 resharper 上下文菜单“反向分配”。或者,您可以逐行使用 ctrl + shift + alt + arrow 将其向左或向右移动,具体取决于光标所在的 = 的哪一侧。


0
投票
我正在使用 Visual Studio 2019 进行 C# 编程,我找到了通过以下修改实现翻转的方法:

找到:

([a-zA-Z1-9-+()<>\.]*) = ([a-zA-Z1-9-+()<>\.]*)


替换:

${2} = ${1}


也许它可以帮助某人。


0
投票
我尝试了接受的答案,但它在 VS2022 上对我不起作用。于是我搜索了一下,发现这个工具对我帮助很大。 安装后,您需要选择您的代码并要求

重构 -> 反转分配

VS Marketplace 上的分配逆变器

© www.soinside.com 2019 - 2024. All rights reserved.