【问题标题】:Extended With-keyword in VB.NETVB.NET中的扩展With-keyword
【发布时间】:2010-10-29 14:13:45
【问题描述】:

在我当前的项目中,每个人都根据它们的本质和作用来命名变量和方法。这有利于快速理解代码,但是有很多长变量名会带来一些麻烦,例如将数据集复制到实体/对象时。所以,虽然你理解了代码,但可读性仍然受到打击。

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

使用 VB.NET 的 With 关键字会有所帮助。

With veryLongVariableName

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

End With

现在,我的问题是,有什么方法可以使用 With 或类似的东西,但同时用于多个变量?比如:

With veryLongVariableName As a, datasetVeryLongVariableName as b

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

End With

我完全赞成描述性的命名约定,但它们确实会使事情变得混乱。尤其是在 VB 中!

【问题讨论】:

    标签: vb.net with-statement


    【解决方案1】:

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

    【讨论】:

    • 虽然它不能完全满足我的要求,但这是一个很好的答案。不过,我不喜欢过分的重构。我有时会发现,当您必须从一个方法跳到另一个方法以查找实际操作时,它会使代码脱离上下文,并使其更难阅读(并且会磨损 F12 按钮;))。
    • 对您的评论+1。我绝对同意它会使调试变得更加乏味。这个想法是,它将使您的函数/方法更容易测试和理解。从我读过的所有内容来看,正确的封装是对抗代码复杂性的最佳方法之一。
    【解决方案2】:

    不,这是不可能的。

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

    不过,您可以,nest With statements(虽然不建议这样做,因为您最终可能会使您的代码变得非常不可读)。

    【讨论】:

    • +1 不知道你可以嵌套它们。很高兴你在上面发出警告。
    • 嵌套,你说。很有趣,但看起来可能会导致各种可读性问题。
    【解决方案3】:

    在幕后,With 关键字所做的只是声明一个引用您指定的对象的临时变量。它的引用将被编译为与完全限定对象名称完全相同的 IL 代码,因此没有性能损失。您可以自己轻松地做到这一点:

    Dim a as MyClass = veryLongVariableName
    Dim b as MyOtherClass = datasetVeryLongVariableName
    
    a.Id = b.Id
    a.Something = b.Something
    

    【讨论】:

    • 确实如此。但是,我喜欢 With 的地方在于它有始有终,用途明确。声明新变量可能会使阅读代码的其他人感到困惑,因此最终,此解决方案的可读性水平大致相同。不过答案很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多