【问题标题】:What's bad about the VB With/End With keyword?VB With/End With 关键字有什么不好?
【发布时间】:2010-10-07 13:39:55
【问题描述】:

question 中,一位用户评论说永远不要在 VB 中使用 With 块。为什么?

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    “从不”是一个强词。

    我认为只要你不滥用它就可以了(比如嵌套)

    恕我直言 - 这更好:

    With MyCommand.Parameters
        .Count = 1
        .Item(0).ParameterName = "@baz"
        .Item(0).Value = fuz
    End With
    

    比:

    MyCommand.Parameters.Count = 1
    MyCommand.Parameters.Item(0).ParameterName = "@baz"
    MyCommand.Parameters.Item(0).Value = fuz
    

    【讨论】:

    • 正确。一段代码的问题应该是“这是否使代码更容易代表解决方案?”。有时,With 块可能看起来比短别名更好。
    • 哈,我同意,我通常只是用来设置参数,直到昨天才知道你可以嵌套它们。
    • 如果我没记错的话,你甚至可以说“With MyCommand.Parameters”。 (至少可以在 VB6 中工作):-)
    【解决方案2】:

    With 关键字还提供了另一个好处——With 语句中的对象只需要“限定”一次,这可以提高性能。在此处查看 MSDN 上的信息:

    http://msdn.microsoft.com/en-us/library/wc500chb(VS.80).aspx

    所以,无论如何,使用它。

    【讨论】:

      【解决方案3】:

      With 关键字没有任何问题。确实,嵌套时它可能会降低可读性,但解决方案就是不要使用嵌套的 With。
      Delphi 中可能存在命名空间问题,它不会强制使用前导点,但该问题在 VB.NET 中根本不存在,因此发布有关 Delphi 的咆哮的人正在这个问题上浪费时间。
      我认为很多人不喜欢 With 关键字的真正原因是它不包含在 C* 语言中,并且许多程序员自动认为他/她最喜欢的语言中不包含的每个功能都是不好的。

      【讨论】:

        【解决方案4】:

        与其他选项相比,它只是没有帮助。

        如果您真的想念它,您可以为您的对象创建一个或两个字符的别名。别名只需要设置一行,而 With 块(With + End With 行)则需要两行。

        别名还为您提供了变量类型的快速鼠标悬停参考。它为 IDE 提供了一个钩子,可以帮助您根据需要跳回到块的顶部(尽管如果块那么大,您还有其他问题)。它可以作为参数传递给函数。您可以使用它来引用索引属性。

        所以我们有一个替代方案,可以用更少的代码提供更多的功能。

        另请参阅此问题:
        Why is the with() construct not included in C#, when it is really cool in VB.NET?

        【讨论】:

        • 同意,如果你需要跳到块的顶部,你首先遇到了那个块的问题;这听起来更像是一个锤子的争论,这完全是另一个讨论。
        【解决方案5】:

        with 关键字仅在精彩的 Verity Stob 的一篇搞笑文章中的传递参考 here 中被侧滑,但对于尖酸刻薄来说这是值得的:请参阅开头的段落

        虽然我们正在处理标识符混淆with 关键字...

        值得阅读整个article

        【讨论】:

          猜你喜欢
          • 2017-11-21
          • 1970-01-01
          • 2014-07-19
          • 2013-04-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-29
          • 1970-01-01
          相关资源
          最近更新 更多