Tag: 重构

是否有可以跨解决方案文件使用的重构工具?

我见过的所有C#和VB.Net的重构工具都只考虑了单个visual studio解决方案中的源代码。 无论好坏,我们的大型 (许多相关程序)系统都分布在许多解决方案文件中,但是: 所有代码都在一个Windows文件夹下。 我们的基于nAnt的构建系统,在windows文件夹中构建所有文件以生成单个dll(比这更复杂但对此问题并不重要)。 因此,单个根文件夹下的所有“.cs”和“.vb”文件都是系统的一部分。 所以我正在寻找重构和逆向工程工具,它们将单个文件夹作为输入并对该文件夹下的所有文件执行操作。 (这些工具可能需要一些帮助来决定“公共”和“内部”的含义,但是当“代码树”是包含代码和任何子代的文件夹时,大多数时候“内部”意味着“在同一代码树中”文件夹。) 现在我很贪婪,我希望这些工具可以创建很多已经完成的重构,并且能够重放重构。 然后我可以尝试理想,如果他们工作,扔掉我的代码,获取最新的代码,你做重构并检查代码之前任何人更改文件。 (同样,当分支需要合并时)

用于将C#公共字段重构为属性的工具

我有很多使用公共字段的C#代码,我想将它们转换为属性。 我有Resharper,它会一个接一个地做,但这将需要永远。 有谁知道一个可以帮助解决这个问题的自动重构工具?

你能从这两种方法中重构一个共同的function吗?

我有两种方法基本上将底层复选框的文本或标记转换为CSV字符串。 这两种方法 GetSelectedTextAsCsv() GetTagAsCsv() 不同之处仅在于从SelectedCheckBoxes提取值的属性 ,其类型为IList public string GetSelectedTextAsCsv() { var buffer = new StringBuilder(); foreach (var cb in SelectedCheckBoxes) { buffer.Append(cb.Text).Append(“,”); } return DropLastComma(buffer.ToString()); } public string GetTagAsCsv() { var buffer = new StringBuilder(); foreach (var cb in SelectedCheckBoxes) { buffer.Append(cb.Tag).Append(“,”); } return DropLastComma(buffer.ToString()); } 我试图提取一个返回Func的方法,但不知道如何将其拉出来。 我的糟糕尝试如下所示,但我无法弄清楚如何提取属性部分,如ConvertToCsv()中的注释所示 public Func ConvertToCsv() { return propertyName => […]

在多次执行相同的SQL查询时重用SqlCommand是否更好?

使用相同的查询但不同的参数查询数据库时,最好是: 一次性使用, 或创建两个单独的查询? 单个使用示例: using (SqlCommand addProduct = new SqlCommand(@”insert into [Products].[Products] ([Name], [Price]) values (@name, @price)”, sqlConnection)) { // Insert the first product. addProduct.Parameters.AddWithValue(“@name”, “Product 1”); addProduct.Parameters.AddWithValue(“@price”, 41F); int countAffectedRows = addProduct.ExecuteNonQuery(); Debug.Assert(countAffectedRows == 1, “Wrong number of rows affected.”); addProduct.Parameters.Clear(); // Insert the second product. addProduct.Parameters.AddWithValue(“@name”, “Product 2”); addProduct.Parameters.AddWithValue(“@price”, 49.9); countAffectedRows = addProduct.ExecuteNonQuery(); […]

自动重构以向方法调用添加参数名称

我正在进行大规模的重构。 我有很多方法,通过位置参数调用。 现在我想通过命名参数调用它们。 这些方法存在于几个非inheritance的类中,并且具有相同的名称,并且它们的签名不同。 例: 定义 public class Foo { public static Foo Create(int count, string name) { … } } public class Bar { public static Bar Create(string description, bool yesNo, float factor) { … } } 以下是我想要替换的电话 public void CreateSomeObjects() { var foo = Foo.Create(123, “foo”); var bar = Bar.Create(“bar”, true, 1.23); } […]

在没有Resharper的C#项目中删除未使用的引用(!= usings)?

有没有办法在没有Resharper帮助的情况下在C#项目中删除对程序集的未使用引用? MSDN文档确实概述了Visual Basic的内容 ,但我找不到与C#相同的对话框。

.net(或至少是c#)是否有任何安全的重构工具?

我最近阅读了Michael C. Feathers的书Working effectively with legacy code并提到了一种测试自动重构工具安全性的方法。 我的问题是: .net平台有没有安全的重构工具? ; 这意味着只允许实际重构的工具,例如,在下面的示例中不允许对temp变量进行inline variable重构,或者至少显示我正在更改逻辑的警告。 class Program { private static int _x; static void Main() { int temp = Test(); for (int i = 0; i < 10; ++i) { Console.WriteLine(temp); } Console.ReadKey(); } private static int Test() { return ++_x; } } 我已经使用最新版本在重构工具Resharper和Coderush + Refactor pro上测试了这个示例,并且都未通过测试并允许重构: class […]

重构消除Lambda表达式中的重复

这两种方法表现出重复: public static Expression<Func> EditDtoSelector() { return f => new FooEditDto { PropertyA = f.PropertyA, PropertyB = f.PropertyB, PropertyC = f.PropertyC, PropertyD = f.PropertyD, PropertyE = f.PropertyE }; } public static Expression<Func> ListDtoSelector() { return f => new FooDto { PropertyA = f.PropertyA, PropertyB = f.PropertyB, PropertyC = f.PropertyC }; } 我怎样才能重构以消除这种重复? 更新:哎呀,我忽略了一个重要的观点。 FooEditDto是FooDto的子类。

什么是失控开关声明的最佳替代方案?

我inheritance了一个包含一些巨大的switch语句块的项目,其中一些包含多达20个案例。 重写这些的好方法是什么?

如何将这两个类似的方法重构为一个?

我已经看到一些使用’T’的样本使一个方法可以重复用于不同类的generics集合,但我从来没有真正深入到它或理解样本。 我想知道是否有可能将下面的两种方法合二为一,这样做的缺点是(性能方面)。 任何人? [NonAction] public List ToSelectList(IEnumerable departments, string defaultOption) { var items = departments.Select(d => new SelectListItem() { Text = d.Code + ” – ” + d.Description, Value = d.Id.ToString() }).ToList(); items.Insert(0, new SelectListItem() { Text = defaultOption, Value = “-1” }); return items; } [NonAction] public List ToSelectList(IEnumerable functions, string defaultOption) { var […]