使用Visual Studio的“在文件中替换”进行临时重构
我最喜欢的重构工具之一是Visual Studio的“在文件中替换”对话框。
引言
我最喜欢的重构工具之一是 Visual Studio 的“在文件中替换”对话框。只需按下 Ctrl+H 键组合即可弹出,拥有各种选项,并且可以对当前文件或文件集进行操作。
最强大的选项是“使用正则表达式”选项。MSDN 中有一些示例可以帮助你开始在 Visual Studio 中使用正则表达式。在此基础上,你可以快速构建自己的正则表达式重构表达式库。
Using the Code
示例:将一组自动属性转换为在 Visual Studio 2005 中可用的旧式风格。
如果你在 VS 2008 项目中拥有需要在 VS 2005 中重用的代码,这会很有用。如果只有一个或两个自动变量,让编译器捕获它们,并快速手动进行更改。但如果它们分散在许多文件中,一些预定义的正则表达式可以大大减少所需的手动工作量。
步骤
- 打开一个空的代码文件,并将下面的示例代码粘贴进去
class Claim { // Works on multi line properties string PayerName { get; set; } // Or single line properties string PayerId { get;set;} string PayerIdQual { get;set;} }
- 按下 Ctrl+H 以调出“在文件中查找”对话框。确保选择了“快速替换”。
- 将下面的正则表达式粘贴到“查找内容”和“替换为”文本框中
Find What: ^{:Wh*}{:i}:Wh*{:i}:Wh*\{:Wh*get:Wh*;:Wh*set:Wh*;:Wh*\} Replace With: \1private \2 m_\3;\n\1\public \2 \3 { get { return m_\3; } set { m_\3 = value; }}
- 点击“全部替换”。
结果
class Claim
{
private string m_PayerName;
public string PayerName { get { return m_PayerName; } set { m_PayerName = value; }}
private string m_PayerId;
public string PayerId { get { return m_PayerId; } set { m_PayerId = value; }}
private string m_PayerIdQual;
public string PayerIdQual { get { return m_PayerIdQual; }
set { m_PayerIdQual = value; }}
}
关注点
通用属性
你可能会问自己:“如果我有一个带有 private
或 protected
setter 的自动属性,或者该属性是一个泛型集合,会发生什么?” 随着场景变得越来越复杂,决策和权衡开始发挥作用。
正则表达式可以被编码来处理多种情况,但它会很快变得难以理解和维护。然而,使用“大量的正则表达式”可能会导致不同的维护问题,并且将所有这些正则表达式剪切粘贴到“查找和替换”文本框中会很麻烦(但当你急需重构数百个测试用例时,它仍然可以大大提高生产力)。
下一篇文章将探讨 Visual Studio 中可用的策略和替代设计。
无论哪种情况,一旦你理解了它们的工作原理,修改正则表达式并不困难。你会发现,通过一点练习,你可以快速创建非常强大的表达式。