2010-10-29 49 views
0

在我当前的项目中,每个人都在变量和方法的名称和名称都是什么之后命名。这对于快速理解代码是很好的,但是有很多长变量名称会带来一些麻烦,比如将数据集复制到实体/对象时。所以,当你理解代码时,可读性仍然会受到打击。在VB.NET中使用关键字扩展

veryLongVariableName.Id = datasetVeryLongVariableName.Id 
veryLongVariablename.Something = datasetVeryLongVariableName.Something 
etc. 

使用VB.NET的With关键字可以提供帮助。

With veryLongVariableName 

    .Id = datasetVeryLongVariableName.Id 
    .Something = datasetVeryLongVariableName.Something 

End With 

现在,我的问题,有没有使用带或其他类似的任何方式,但在同一时间几个变量?就像:

With veryLongVariableName As a, datasetVeryLongVariableName as b 

    a.Id = b.Id 
    a.Something = b.Something 

End With 

我都是描述性的命名约定,但他们确实倾向于混乱的东西。特别是在VB中!

回答

4

如果执行这些赋值集的代码是单个逻辑操作的一部分,那么您可以将它重构为它自己的方法/函数调用。虽然这并没有具体回答你关于使用倍数的问题,但它可以提高可读性,使用Code Complete等流行书中的建议。

+0

+1:我认为这可能会达到相同的点,好主意。 – 2010-10-29 14:26:04

+1

尽管它并不完全符合我的要求,但这是一个很好的答案。尽管如此,我并不是过去重构过的粉丝。我有时会发现它将代码从上下文中移除,并且使得当您不得不从方法跳转到方法以查找实际操作时,会使其更难以阅读(并且穿出F12按钮;))。 – 2010-11-01 08:52:11

+0

对您的评论+1。我绝对同意它会使调试更乏味。这个想法是,它会让你的函数/方法更易于测试和理解。从我读过的所有东西中,正确的封装是解决代码复杂性的最佳方法之一。 – wllmsaccnt 2010-11-01 19:55:02

4

不,这是不可能的。

With仅适用于单个对象。见MSDN

然而,你可以,nest With statements(尽管这是不推荐的,因为你可能最终使你的代码真的不可读)。

+0

+1不知道你可以将它们嵌套。很高兴你对此发出警告。 – wllmsaccnt 2010-10-29 14:28:20

+0

嵌套,你说。有趣的,但看起来可能会导致各种可读性问题。 – 2010-11-01 08:54:07

2

在幕后,所有With关键字所声明的临时变量引用了您指定的对象。其引用将被编译为与完全限定对象名称完全相同的IL代码,因此不会影响性能。你可以很容易地做到这一点:

Dim a as MyClass = veryLongVariableName 
Dim b as MyOtherClass = datasetVeryLongVariableName 

a.Id = b.Id 
a.Something = b.Something 
+0

确实。但是,我喜欢的是,它有一个开始和结束,并有明确的用途。声明新变量可能会让其他人阅读代码时感到困惑,所以最终,可读性水平与此解决方案保持大致相同。虽然答案很好。 – 2010-11-01 08:57:00