6

我只想知道在性能和最佳实践方面推荐以下哪种方法。有性能差异吗?

if (objA.objB.objC.objD.objE != null)
{
   objX.var1 = objA.objB.objC.objD.objE.prop1;
   objX.var2 = objA.objB.objC.objD.objE.prop2;
   objX.var3 = objA.objB.objC.objD.objE.prop3 + objA.objB.objC.objD.objE.prop4;

   ......
   ......
}

or

var objonlyE = objA.objB.objC.objD.objE
if (objonlyE != null)
{
   objX.var1 = objonlyE.prop1;
   objX.var2 =  objonlyE.prop2;
   objX.var3 = objonlyE.prop3 + objonlyE.prop4;
   ......
   ......
}
4

5 回答 5

7

第二个更好,因为你永远不知道隐藏在“.”后面的是什么。它可能是数据库调用或其他一些昂贵的操作。

于 2012-12-28T12:12:00.460 回答
4

性能不会受到影响,因为属性访问会很快(即使不是,如果您以相同的顺序访问相同的属性也没什么区别)。

可维护性和可读性是问题所在,在这方面,您的第二个选择要好得多。

阅读得墨忒耳定律

得墨忒耳定律 (LoD) 或最少知识原则是开发软件的设计指南,尤其是面向对象的程序。在其一般形式中,LoD 是松散耦合的一种特殊情况。

于 2012-12-28T12:11:17.320 回答
0

在第二种方法中,程序员错误的位置较少,例如在第一种方法中,您可能会犯以下错误:

objX.var1 = objA.objB.objC.objD.objE.prop1;
objX.var2 = objA.objB.**objU**.objD.objE.prop2;
于 2012-12-28T12:16:12.393 回答
0

第二个更容易使用......所以,更好,因为你不会一次又一次地重复你的代码......

于 2012-12-28T12:10:45.890 回答
0

我更喜欢第二种方法,它更具可读性。就性能而言,它应该是不明显的,即在常规变量/属性的情况下。如果在属性下隐藏了一些性能繁重的操作,那么您还应该使用第二个版本,因为它会更快。

于 2012-12-28T12:10:57.127 回答