65.9K
CodeProject 正在变化。 阅读更多。
Home

使用Visual Studio的“在文件中替换”进行临时重构

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.25/5 (3投票s)

2009年4月13日

CPOL

2分钟阅读

viewsIcon

14089

我最喜欢的重构工具之一是Visual Studio的“在文件中替换”对话框。

引言

我最喜欢的重构工具之一是 Visual Studio 的“在文件中替换”对话框。只需按下 Ctrl+H 键组合即可弹出,拥有各种选项,并且可以对当前文件或文件集进行操作。

最强大的选项是“使用正则表达式”选项。MSDN 中有一些示例可以帮助你开始在 Visual Studio 中使用正则表达式。在此基础上,你可以快速构建自己的正则表达式重构表达式库。

Using the Code

示例:将一组自动属性转换为在 Visual Studio 2005 中可用的旧式风格。

如果你在 VS 2008 项目中拥有需要在 VS 2005 中重用的代码,这会很有用。如果只有一个或两个自动变量,让编译器捕获它们,并快速手动进行更改。但如果它们分散在许多文件中,一些预定义的正则表达式可以大大减少所需的手动工作量。

步骤

  1. 打开一个空的代码文件,并将下面的示例代码粘贴进去
    class Claim
    {
        // Works on multi line properties
        string PayerName 
        { 
            get;
            set;
        }
        // Or single line properties
        string PayerId { get;set;}
        string PayerIdQual { get;set;}
    }
  2. 按下 Ctrl+H 以调出“在文件中查找”对话框。确保选择了“快速替换”。
  3. 将下面的正则表达式粘贴到“查找内容”和“替换为”文本框中
    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; }}
  4. 点击“全部替换”。

结果

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 中可用的策略和替代设计。

无论哪种情况,一旦你理解了它们的工作原理,修改正则表达式并不困难。你会发现,通过一点练习,你可以快速创建非常强大的表达式。

© . All rights reserved.