c# – 处理对象的代码分析友好方式
作为Visual Studio 2010(主要是C#4.0)开发标准的一部分,我们启用了代码分析.当我正在审查最近为新项目提交的代码时,我看到了很多
警告.问题是,我所做的一切似乎都没有消除警告 – 我花了几个小时搜索网络并尽我所能. 首先,让我明确一点,我不是在讨论如何使用简单的使用块来正确处理局部变量 – 这不是问题.在我的情况下,当对象由方法返回或分配给方法中的另一个对象时,会出现这些警告. 这是一个代码示例,其中包含四个此类警告: public void MainMethod() { var object1 = CreateFirstObject(); // Warning here var object2 = CreateSecondObject(); // Warning here SomeCollectionProperty.Add(object1); SomeCollectionProperty.Add(object2); } private SomeObject CreateFirstObject() { var theObject = new SomeObject() // Warning here { FirstProperty = "some value",// ... }; return theObject; } private SomeOtherObject CreateSecondObject() { var theObject = new SomeOtherObject() // Warning here { FirstProperty = "a different value",// ... }; return theObject; } 我已经评论了警告发生的地方. 我已经尝试重构两个Create方法,如MSDN文章(here)中所述,但警告仍然出现. UPDATE 此外,尽管对象初始值设定项可能是问题的一个组成部分,但请记住,初始化程序与两个私有方法隔离,与MainMethod中的警告无关. 谁能告诉我如何正确实施这些方法来消除CA2000警告? 解决方法
在这种情况下,CA2000正在检测的问题是,如果在将异常传递出方法之前发生异常,则一次性实例可能是“孤立的”.例如,CreateFirstObject的“正确”实现看起来如下所示:
private SomeObject CreateFirstObject() { var theObject = new SomeObject(); try { theObject.FirstProperty = "some value"; } catch { theObject.Dispose(); throw; } return theObject; } 鉴于您所描述的有关MainMethod所需行为的内容,其“正确”实现可能如下所示: public void MainMethod() { var object1 = CreateFirstObject(); try { SomeCollectionProperty.Add(object1); var object2 = CreateSecondObject(); try { SomeCollectionProperty.Add(object2); } catch { object2.Dispose(); throw; } } catch { object1.Dispose(); SomeCollectionProperty.Remove(object1); // Not supposed to throw if item does not exist in collection. throw; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 检查是否使用了c 11功能
- 某券商Oracle RAC数据库服务器更换(上)
- MSSQL之八 实现视图与索引
- postgresql – 如何将Pgadmin3连接到Virtualbox机器上的数据
- 在C#中Java的AbstractMap相当于什么?
- ruby-on-rails – Ole :: Storage :: FormatError:OLE2签名
- c# – PUT和Delete不能在Windows Azure上使用ASP.NET WebAP
- 我如何使用C#泛型字典,就像在Java中使用Hashtable一样?
- 试图在Swift中使用Objective-C编写的委托方法抛出“无法找到
- C#.NET中的DDD“Module”