我正在做代码审查,发现很多代码格式如下: public MyResponse MyMethod(string arg) { using (Tracer myTracer = new Tracer(Constants.TraceLog)) { MyResponse abc = new MyResponse(); // Some code return abc; } } 当我运行代码分析时,我收到 CA2000 警告 Microsoft.Reliability 代码是否应该改写为: public MyResponse MyMethod(string arg) { MyResponse abc = new MyResponse(); using (Tracer myTracer = new Tracer(Constants.TraceLog)) { // Some cod
以下是关于 code-review 的编程技术问答
我想获得一些关于我为封装延迟加载模式而编写的类的反馈.通常,当我进行延迟加载时,它看起来像这样: private SomeClass _someProperty; public SomeClass SomeProperty { get { if(this._someProperty == null) { // run code to populate/instantiate _someProperty } return this._someProperty; } } 该类的工作方式非常基本——它接受一个泛型类型参数和一个或多个使用 Func 的方法委托.如果指定了多个委托,则使用第一个返回非默认值的委托(此特定功能可能并非对每个人都有用,但在我使用它的域中是必需的). 下面是一个简短的摘录,我相信它几乎可以显示该课程的作用: /// /// A
我写了一些,可以分析32位工具方法的整数比签署 Int32.Parse 快得多。我希望你可以通过查看我的代码,并建议改进或指出的错误给我一些你的经验。如果你有兴趣(并具有当然的时间),我将非常感激。 我已经发布我的代码“修改我的密码”网站上。这里是链接: http://refactormycode.com/codes/699- INT32-快速解析器 感谢您。 编辑:感谢大家对你有帮助的建议。我按照你的想法,这里是更新的版本: HTTP: //refactormycode.com/codes/699-int32-quick-parser#refactor_142758 (请使用diff工具才能看到更改后的代码行。) 感谢您! 解决方案 我觉得你的实现是相当不错的。我做了使用指针运算,这确实是快,但在我看来脏不安全版本 业绩(运行10M随机字符串INT 30个样品): Int32.Parse 1766.17毫秒(STDDEV:1.83
只是想知道您是否可以确认以下代码有效并建议如果有更好的替代方案? 我试图在1到100000之间生成不同的随机数集合. Random rand = new Random(); List result = new List(); for (Int32 i = 0; i value == curValue)) { curValue = rand.Next(1, 100000); } result.Add(curValue); } 解决方案 是的,据我所知,代码确实是您想要的. 循环通过列表来检查每个值不是很有效.您可以将值放在HashSet中以加快ckeck. 作为'hashset不保留项目的顺序,您仍需要
我正在寻找一个帮助我更快地掌握别人的代码的工具.通常,我正在使用10-15方法调用跨越3-5个模块(DLL或.NET组件)的拨号.我是追求的,是一种工具,可用于在10-30分钟内绘制注释的呼叫图. 我认为它应该看起来像没有UML编辑器的怪物的工作流和组合UML图的某种组合.只需在屏幕上删除十几个矩形,向每个删除十几个矩形(以及可选的:模块名称,参数等)添加方法名称.添加一个快速说明此方法所做的,进展的内容,out out等.然后将这些数字(矩形)与不同的查找箭头连接,以指示此方法调用的类型:简单调用,呼叫哪个呼叫,远程返回呼叫等. 重要的是 - 工具应该易于使用.否则,我可以碰到MS Word并在那里画画.但这并不是一项简单的任务. 谢谢. 解决方案 红色门的.net反射器是一个流行的免费调试,逆向工程等工具. 要赞美它,有几个方便的加载项(也是免费的),这将有助于您可视化有图: 图 sexthviz (注意这是一个乏味安装和配置.您需要安装 win3
我想获得一些关于我为封装延迟加载模式而编写的类的反馈.通常,当我进行延迟加载时,它看起来像这样: private SomeClass _someProperty; public SomeClass SomeProperty { get { if(this._someProperty == null) { // run code to populate/instantiate _someProperty } return this._someProperty; } } 该类的工作方式非常基本——它接受一个泛型类型参数和一个或多个使用 Func 的方法委托.如果指定了多个委托,则使用第一个返回非默认值的委托(此特定功能可能并非对每个人都有用,但在我使用它的域中是必需的). 下面是一个简短的摘录,我相信它几乎可以显示该课程的作用: /// /// A
自从我第一次犯了在 if 中做作业的错误以来,我总是这样写我的 if: if (CONST == variable) { 为了避免这样做的常见(至少对我而言)错误: if (variable = CONST) { //WRONG, assigning 0 to variable 自从我阅读了 Joel Spolsky 的文章 让错误的代码看起来错误一直在努力将他的建议付诸实践. 那么,您还使用哪些其他模式来使错误代码看起来不正确,或者在您犯了语义错误时强制语法错误? 解决方案 我发现让错误的代码在编译器看来是错误的很重要.在实践中(并且仅在使用强类型语言时),这意味着省略任何类型的变量前缀(甚至是 Apps Hungarian)以支持不同的类型.以 Joel 为例,如果有两种不同的类型来表示原始字符串和净化后的字符串,并且两者之间没有隐式转换,那么 Apps Hungarian 地址的问题就不会出现. Word 文档坐标也是如此.在某种程度上,Apps H
我想使用工具进行自动化代码审查和重构。 寻找符合这些要求的工具建议: 低学习曲线。 定位于C#(也许是VB.NET)。 让我们轻松添加或自定义规则并且了解整个CodeDOM)。 很好记录。 对不起,低汇率=) 手动代码审查仍然完成。但是该工具应该足够彻底,以便在高级开发人员进行手动审核之前捕获所有常见的嘘声。 如果您有故事要分享您所拥有的工具 编辑: 最后有一些时间来研究更多的建议。 StyleCop不与Visual Studio Express版本集成,这是我正在使用的。 ReSharper有比我所需要的更多的功能(这纯粹是为了自动化代码审查)。我会说,它不是一个非常集中的工具,我的目的(也是它的价格标签的原因)。 仍然在寻找其他建议(如果有)。 EDITDIT: StyleCop不与Visual Studio Express集成,但仍然可以设置为运行作为在Visual Studio Express中构建的一部分。看起来像是现在最好的解
这是更好的方式(效率/最佳实践明智)测试如果双变量等于0? 1. if(a_double) ..... else ... OR 2. if(a_double == 0) ..... else ... .. 解决方案 你在做什么)。我通常喜欢 if(a_double == 0.0)虽然。另外请注意,使用浮点数,通常需要进行近似比较,以便计算出四舍五入的可能性(尽管这样做可能非常简单)。 编辑:由于似乎有一些误解,什么数字可以和不能精确地表示:大多数计算机使用二进制浮点。这意味着可以精确地表示分母是二的幂的和的分数。如果(且仅当)分母包含不能被表示为2的幂的和的素因子,则不可能精确地表示该数字。 当然,如果你得到太小(或太大),它是不可能表示数字(例如,正常的IEEE浮点不提供一种方式来表示一个数字,如1e + 10000或1e-2000)。此外,当你接近表示的极限时,你放弃一些精度(例如,正常 double 的
一个史蒂夫·麦康奈尔的清单项目是你不应该用循环索引猴子(第16章,第25页,的循环指标的,PDF格式)。 这使得直观的感觉,是一种实践,我始终遵循除也许因为我学会了如何编程回到了一天。 在最近的代码审查,我发现这个尴尬的循环,并立即它标记为可疑。 的for(int i = 0; I< this.MyControl.TabPages.Count;我++) $ { b $ b this.MyControl.TabPages.Remove(this.MyControl.TabPages [I]); 我 - ; } 它,因为它管理由保持指数在零工作,直到所有的几乎是可笑的TabPages被删除。 这循环可以被写成 而(MyControl.TabPages.Count大于0) MyControl.TabPages.RemoveAt(0); 和由于控制实际上是在书面大约相同的时间作为循环它甚至已写成 My
我们开始使用 VS 2012 和 VS 2013 预览版中内置的代码审查功能.请求审查和添加评论似乎很简单.如果有人添加评论要求更改代码,那么请求者如何进行这些更改并显示它们? 所以流程是这样的: 第 1 个人请求代码审查. 第 2 个人添加评论并选择“需要工作". 第 1 个人进行了必要的更改. 现在第 1 个人如何将这些更改显示给第 2 个人?您可以添加评论并发送它们,但文件不会更改.我假设这些文件来自请求原始审查时创建的变更集.第 1 个人是否应该关闭此审核并请求第二次审核? 创建第二个评论似乎不是最佳选择,因为您丢失了关于为什么进行更改的对话历史记录. 有很多网站展示了如何使用代码审查的基本功能,但是有没有展示最佳实践的网站?例如,谁应该点击文件旁边的复选框? 解决方案 所以流程是这样的: 第 1 个人请求进行代码审查. 第 2 个人添加评论并选择“需要工作". 第 1 个人进行了必要的更改. Person 1 更新与代码审查
在持续的努力改进我的代码,我正在寻找创建和比较.net中的盐密码的最佳方式. 有没有更好或更安全,方法是这样做? 我的当前代码如下: public static string CreateSaltedPassword(string salt, string password) { SHA1CryptoServiceProvider SHA1 = null; SHA1 = new SHA1CryptoServiceProvider(); // Convert the string into an array of bytes byte[] byteValue = System.Text.Encoding.UTF8.GetBytes(salt + password); // Compute the hash value byte[] byteHash = S
如何创建适合在坩埚中查看的补丁? git diff branch master --no-prefix > patch 这只会生成 3 行上下文.所以我做了以下 git diff --unified=2000 branch master --no-prefix > patch 希望所有文件的行数少于 2000 行.有没有办法告诉 git 将文件中的所有行都包含在补丁中,而不必指定最大行数? 解决方案 我知道这是旧的,但我也不喜欢硬编码的解决方案,所以我测试了这个: git diff -U$(wc -l MYFILE) 使用 -U 似乎是解决该问题的唯一方法,但使用行数可以保证它适用于非常大的文件中的微小更改.
我的团队正在将 Bitbucket 用于我们的 git 存储库,并且我们最近开始使用拉取请求功能进行代码审查.它在第一次审查时运行良好,但如果它经历了多次迭代(即进行了更改并更新了拉取请求),我希望看到一个链接,其中仅包含自上次代码审查以来所做的新更改. 我查看了“比较"功能,但 UI 看起来只能在分支之间进行比较.有没有一种简单的方法来获得两个提交之间的差异? 解决方案 这只是对已经给出的答案的轻微修改,但在末尾添加#diff 而不是#commits 通常是我正在寻找的.另外,正如其他人可能提到的那样,对我来说最好的结果通常是通过将较新的提交放在第一位,将旧的提交放在第二位,但这取决于您的特定需求. https://bitbucket.org///branches/compare/..#diff
我必须从未合并的分支创建一些代码审查. 旁注:在寻找解决方案时,我们不要去本地分支上下文问题,因为这将在服务器上运行,只有 origin 远程,我将始终运行 git fetch origin 命令在其他命令之前,当我们谈论分支时,我们将参考 origin/branch-name. 旁注 2:我非常了解 git 如何以瓷器和管道方式工作. 如果设置很简单,并且源自 master 的每个分支都可以按照自己的方式继续运行,我们就可以运行: git rev-list origin/branch-name --not origin/master --no-merges 对于每个未合并的分支,并将生成的提交添加到每个分支的每个审查中. 当合并 2-3 个分支并继续处理其中一些分支时,就会出现问题.正如我所说,对于每个分支,我想以编程方式创建代码审查,并且我不想在多个审查中包含提交. 主要是减少了为每次提交查找原始分支的问题. 或者更简单地说...查找所有未合并的提交,这
是否有任何适用于 Java 的自动代码审查工具?特别是 Eclipse 的插件?我期望的工具是一个自动代码审查插件或工具,可以自动检测代码中的问题.(微软使用 OACR 来做到这一点).像 Jupiter 无济于事因为它们只是 Eclipse 的同行评审工具. 解决方案 你的意思不是自动代码审查,而是静态代码分析. 对于 Java 工具,请参阅:http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis#Java 基本上,代码审查和静态代码分析之间的区别是您已经注意到的.您对可以运行的软件感到好奇,这些软件可以告诉您潜在的问题或错误、生成报告等...不是允许其他开发人员查看和注释您的代码以发现问题的软件. FindBugs 非常流行并且有高水平的支持,并且 checkstyle 紧随其后.我没有用过其他的.(网站没什么可看的,但软件可以用)
我一直将 Rietveld 视为我公司缺乏代码审查的解决方案.是否可以在不使用 App Engine 的情况下在内部服务器上进行设置?它似乎有一些 App Engine 特定的代码,我不确定它是否可以在普通的旧 Django/Apache 安装上设置.我环顾四周,但没有找到任何有关此的信息. 解决方案 我会考虑使用 评论委员会. Review Board 是一个强大的基于网络的提供的代码审查工具开发人员处理代码的简单方法评论.它从小就可以很好地扩展大型公司的项目和报价各种各样的工具来采取大部分的代码审查的压力和时间过程. 长期以来,代码审查一直是太多的苦差事.这主要是由于缺乏优质工具可用,留给开发人员求助于电子邮件和基于错误跟踪器解决方案. 我们已经看到了很多时间和精力浪费在公开的情况下进行代码审查源项目和公司.在在这两种情况下,代码审查都是通常通过电子邮件完成.一个花费了大量时间在形成审查请求时,切换在差异和电子邮件之间,以及试图了解哪些部分审阅者所指的代码.
我正在尝试学习和实践 IoC 以及如何针对接口而不是对象进行编程.这对我来说相当困难.这是我到目前为止的代码.我犯了什么错误吗?向我指出它们将帮助我了解它在付诸实践时实际上是如何适应的. 谢谢! using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SharpDIC.Api.Interfaces { interface IDownloader { void DownloadInformation(); } } using System; using System.Collections.Generic; using System.Linq; using System.Text; using SharpDIC.Api.Interfaces; namespace SharpDIC.Api.Model