草庐IT

c# - C#重构问题

我今天看到了下面的代码,我不喜欢它。它在做什么很明显,但我还是要在这里添加一点解释:基本上,它从数据库中读取应用程序的所有设置,并遍历所有设置以查找数据库版本和应用程序版本,然后将一些变量设置为数据库中的值(稍后使用)。我看了看,觉得它有点难看-我不喜欢switch语句,我讨厌在完成后继续遍历列表的东西。所以我决定重构它。我想问大家的问题是你们将如何重构它?或者您认为它甚至根本不需要重构?代码如下:using(varsqlConnection=newSqlConnection(Lfepa.Itrs.Framework.Configuration.ConnectionString)){s

c# - 你会如何重构这段臭代码? (记录、复制和粘贴,.Net 3.5)

我有这样的代码:Loggerlogger=newLogger();System.Diagnostics.StopwatchstopWatch=newSystem.Diagnostics.Stopwatch();logger.LogInformation("CallingSomeObject.SomeMethodat"+DateTime.Now.ToString());stopWatch.Start();//ThisisthemethodI'minterestedin.SomeResponseresponse=someObject.SomeMethod(someParam);stopWa

c# - 重构/移动字符串到 App.Config 键

VisualStudio2013和ReSharper都提供了许多方便的代码重构快捷方式。我常用的一个是ReSharper的“将字符串移动到资源文件”,它将硬编码字符串移动到项目中的*.resx文件中。遗憾的是,ReSharper不提供“App.config”作为要移动到的资源文件列表中的一个选项。有谁知道如何使用VS或ReSharper启用或创建“将字符串移动/转换为App.Config键”重构? 最佳答案 配置管理总是特定于程序,在许多情况下是构建系统。并非所有程序都从应用程序/网络配置中读取海峡。事实上,有时您想要创建一个类或接

c# - 如何组织单元测试而不让重构成为噩梦?

我目前组织单元测试的方式归结为以下几点:每个项目都有自己的单元测试专用项目。对于项目BusinessLayer,有一个BusinessLayer.UnitTests测试项目。对于我要测试的每个类,测试项目中都有一个单独的测试类,位于与被测类完全相同的文件夹结构和完全相同的命名空间中。对于来自命名空间BusinessLayer.Repositories的类CustomerRepository,在命名空间BusinessLayerUnitTests.Repositories中有一个测试类CustomerRepositoryTests>.每个测试类中的方法都遵循简单的命名约定MethodNa

c# - 如何关闭 resharper 中的 "Convert Extension Method to Plain Static"自动重构?

在使用Resharper时,由于某些原因,当我调用扩展方法时,它会自动将其转换为静态方法调用。这就是所谓的ConvertExtensionMethodtoPlainStatic重构。foo.Bar()成为MyStaticExtensions.Bar(foo);具有讽刺意味的是,它随后将此标记为代码异味。我该如何关闭它? 最佳答案 Resharper的IntelliSense中嵌入了此功能。我经常使用Linq-to-sql扩展,所以我禁用了这个功能:Resharper-选项-IntelliSense-启用RadiobuttonVisu

c# - 寻找如何重构我的算法的想法

我正在尝试自己编写GameofLife,有我自己的一套规则。我想应用的第一个“概念”是社会化(这基本上意味着细胞是想独处还是想与其他细胞成群结队)。数据结构是二维数组(目前)。为了能够将一个单元格移动到/远离一组其他单元格,我需要确定将它移动到哪里。这个想法是,我评估该区域(邻居)中的所有单元格并获得一个向量,它告诉我将单元格移动到哪里。向量的大小为0或1(不移动或移动),角度为方向数组(上、下、右、左)。这是一张表示细胞受力的图像,就像我想象的那样(但范围可能超过5):让我们以这张照片为例:Forcesfromlowerleftneighbour:down(0),up(2),righ

c# - 在 C# 中重构抽象类

抱歉,如果这听起来很简单,但我正在寻找一些帮助来改进我的代码:)所以我目前有以下实现(我也写过):publicinterfaceIOptimizer{voidOptimize();stringOptimizerName{get;}}publicabstractAbstractOptimizer:IOptimizer{publicvoidOptimize(){//Generalimplementationherewithfewcallstoabstractmethods}}publicabstractAbstractPriorityOptimizer:AbstractOptimizer{

c# - 将库重构为异步,如何避免重蹈覆辙?

我有这样一个方法:publicvoidEncrypt(IFilefile){if(file==null)thrownewArgumentNullException(nameof(file));stringtempFilename=GetFilename(file);using(varstream=newFileStream(tempFilename,FileMode.OpenOrCreate)){this.EncryptToStream(file,stream);file.Write(stream);}File.Delete(tempFilename);}不过,我想写另一个方法,非常相

c# - 重构 if-else if - else

我有以下代码示例if(object.Time>0&&=500&&=1000){rate=1.00m}else{rate=0m;}我的问题是我可以使用什么设计模式来让它变得更好?编辑:为了澄清一点,您在此处看到的代码是当前存在于策略模式实现中的代码。我们有3种计算类型,其中2种具有3种不同的“比率”,可以根据您在下面看到的时间使用这些计算。我考虑过为每个比率创建一个策略实现,但随后我会移动确定要使用的策略的逻辑,并使它变得一团糟。谢谢! 最佳答案 如果您真的在寻找一种设计模式,我会选择责任链模式。基本上您的“链接”会尝试处理输入。如果

c# - 重构静态类以与依赖注入(inject)一起使用

我们需要在具有静态方法的代码中使用非托管库。我想在我的代码中将库操作作为依赖项引入。除了具有静态方法之外,该库还有一个初始化方法和一个设置方法,它们都是全局的。所以我不能只将它包装在一个实例类中,因为如果一个实例更改设置,所有其他实例都会受到影响,如果一个实例被初始化,所有其他实例将被重新初始化。我考虑过将其作为单例类引入。这样它将在一个实例类中,但只有一个实例,因此我不必担心更改设置或初始化。您如何看待这种方法?我对依赖注入(inject)模式还很陌生,我不确定单例模式是否是一个好的解决方案?对于类似的案例,您的解决方案是什么?编辑:初始化也需要一个参数,所以我不能只是锁定方法调用并