Tag: 重构

如何重构这个switch语句?

string liquidClass = string.Empty; switch (cmbLiquidClass.Text) { case “LiquidClass1”: liquidClass = Settings.Default.LiquidClass1; break; case “LiquidClass2”: liquidClass = Settings.Default.LiquidClass2; break; case “LiquidClass3”: liquidClass = Settings.Default.LiquidClass3; break; case “LiquidClass4”: liquidClass = Settings.Default.LiquidClass4; break; case “LiquidClass5”: liquidClass = Settings.Default.LiquidClass5; break; case “LiquidClass6”: liquidClass = Settings.Default.LiquidClass6; break; case “LiquidClass7”: liquidClass = Settings.Default.LiquidClass7; break; case “LiquidClass8”: liquidClass = Settings.Default.LiquidClass8; break; […]

如何以编程方式识别使用C#的方法引用的数量

我最近inheritance了需要修剪和清理的C#控制台应用程序。 简而言之,该应用程序由一个包含超过110,000行代码的类组成。 是的,一个class级超过110,000行。 当然,该应用程序是我们业务的核心,运行’全天候更新动态网站上使用的数据。 虽然我被告知我的前任是“一个非常优秀的程序员”,但显然他根本没有进入OOP(或版本控制)。 无论如何……在熟悉代码的同时,我发现了许多声明的方法,但从未引用过。 看起来好像使用了复制/粘贴来对代码进行版本化,例如说我有一个名为getSomethingImportant()的方法,很可能还有另一个名为getSomethingImortant_July2007()的方法(在大多数情况下,模式是functionName_ [datestamp])。 看起来当程序员被要求对getSomethingImportant()进行更改时,他会复制/粘贴然后重命名为getSomethingImortant_Date,对getSomethingImortant_Date进行更改,然后将代码中的任何方法调用更改为新方法名称,将旧方法保留为代码但从未引用过。 我想编写一个简单的控制台应用程序,它可以遍历一个巨大的类,并返回所有方法的列表,其中包含每个方法的引用次数。 根据我的估计,有超过1000种方法,所以手动这样做需要一段时间。 .NET框架中是否有可用于检查此代码的类? 或者任何其他有用的工具,可以帮助识别声明但从未引用的方法? (旁边的问题:有没有其他人见过像这样的C#应用​​程序,一个大的类?它或多或少是一个巨大的程序过程,我知道这是我见过的第一个,至少是这个大小。)

Resharper是否包含转换为Direct Cast重构?

我在整个代码库中都有这样的代码: MultiList ml = this.CriteriaList.ItemByName(SC_SAM_CATEGORIES) as MultiList; 我想将其转换为直接投射: MultiList ml = (MultiList) this.CriteriaList.ItemByName(SC_SAM_CATEGORIES); 可能会使用var ml替换MultiList ml var ml 。 Resharper是否包含这样的重构,可能是通过插件? 如果是这样,我该如何开启它?

拆分长linq查询以提高可维护性

我有很多这些任务都基于LINQ查询。 我正在寻找重构它们的好方法,使它们更容易阅读,并允许我根据语言/区域等更改查询。 var mailTaskOne = CreateTask(() => myService.Mail.Where(p => p.ProjectName == “Delta” && (p.MailLang== (int)MailLanguage.EU || p.MailLang == (int)MailLanguage.RU) && (p.DateEntered >= startDate && p.DateEntered <= endDate) && p.MailPriority == (int)MailPriority.High).Count()); 我认为方便的一种方法是将查询分成这样的东西。 var results = myService.Mail.Where(x => x.ProjectName == “Delta”); results = results.Where(p => p.MailLang== (int)MailLanguage.EU); results = results.Where(p => p.DateModified >= startDate && p.DateModified […]

如果您有多个Visual Studio解决方案,如何使用重构工具?

我们的产品有两个visual studio解决方案:一个用于我们的可重用组件(Core.sln),另一个用于我们的产品(Product.sln)。 Product解决方案中的项目具有对我们核心的程序集的引用(文件引用)。 在一个解决方案中工作时,重构function不会在另一个解决方案中进行折射。 重命名核心类中的方法会在Core解决方案中重命名它,但不会在Product解决方案中重命名。 使用多种解决方案时,有没有办法从重构工具中受益? 商业重构产品(Resharper,Code Rush)是否也有同样的限制?

重构我的代码:避免在派生类中进行强制转换

首先,我对标题感到抱歉,我不知道如何准确描述我的问题。 我希望通过代码更好地解释。 public abstract class AB { public MyModel Model; } public class A : AB { public A() { Model = new MyModelA(); } public void AMethod() { var model = (MyModelA) model; // I have to do this all place } public void AnotherMethod() { var model = (MyModelA) model; // same here […]

如何将一个方法从类中拉出(并转换为新的或现有的)?

使用Visual Studio 2010 / Resharper将一个简单的方法从类中拉出来并进入一个新类的最简单方法是什么? 编辑:我使用Resharper版本5。

在Visual Studio中一步重命名具有文件名的类

我是一名长期的Java程序员,但目前我用C#编写代码。 我习惯了,当我更改文件名时,类名也会改变,反之亦然。 这在我的Visual Studio中不起作用。 我必须分别重命名类名和文件名,这对我来说有时很烦人,因为我总是忘记它,所以结果是我有不同的类和文件名。 Visual Studio中是否有选项将重命名放在一个步骤中?

如何重构多个类似的Linq-To-Sql查询?

在downvoting或closing之前阅读:这与我之前的一个问题几乎完全相同,只是为了将上一个问题重新改写为Linq-To-Sql范围。 上一个问题中包含的所有答案都对Linq范围有效,但在Linq-To-SQL范围内无效。 假设我想要重构以下两个Linq-To-SQL查询: var someValue1 = 0; var someValue2= 0; var query1 = db.TableAs.Where( a => a.TableBs.Count() > someValue1 ) .Take( 10 ); var query2 = db.TableAs.Where( a => a.TableBs.First().item1 == someValue2) .Take( 10 ); 请注意,只有Where参数更改。 有什么方法可以将查询放在方法中并将Where参数作为参数传递? 当我尝试枚举结果时, 上一个问题中发布的所有解决方案都已在运行时尝试失败。 引发的exception是:“用于查询运算符的不支持的重载’Where’”

C# – 将’object’参数转换为该对象的类型?

C# 大家好, 我将一个对象传递给一个方法。 我想将该对象强制转换为特定的类,以便我可以执行自己的特定方法吗? 我怎样才能做到这一点? Move( new Cat() ); Move( new Pigeon() ); public void Move(object objectToMove) { if(objectToMove== Cat) { Cat catObject = objectToMove as Cat; catObject.Walk(); } else if(objectToMove== Pigeon) { Rat pigeonObject = objectToMove as Pigeon; pigeonObject.Fly(); } }