【问题标题】:What are a good No OP operation for vb.net?vb.net 有什么好的 No OP 操作?
【发布时间】:2013-02-09 16:54:18
【问题描述】:

我们可以在确保它不做任何其他事情的同时设置断点。

在 c 中,那将是 while(false);

在 vb.net 中做什么?

【问题讨论】:

  • c 中类似于 while(false) 的东西
  • 在人工无操作语句上放置断点与在任何其他语句上放置断点有何不同?
  • 只需将断点放在您不想执行任何操作的语句之后。

标签: vb.net noop


【解决方案1】:

非常奇怪的问题,您可以在代码中的任何位置放置一个断点。但是这里有一些无用的行:

 Do While False
 Loop

 While False
 End While

甚至以下:

 Dim hello = Nothing

或者这个:

 Format("", "")

【讨论】:

  • 一行行能搞定吗?
  • @JimThio 第二个建议怎么样?
  • Dim hello As Object = Nothing 应该在没有实际内存分配的情况下工作;只是堆栈上的一个额外的本地。
  • Dim hello = Nothing 是不允许的;它不知道给hello 提供什么类型。
  • @MarkHurd 不,没关系。如果你这样做,编译器会假定它是一个对象。
【解决方案2】:

如果你总是需要它在那里打破你可以放 StopDebugger.Break()

【讨论】:

  • 我想轻松破解。
【解决方案3】:

如果您出于某种原因真的想要 No-Op(这会变成最无效的单行代码的竞赛吗?!),这些怎么样?

System.Threading.Thread.Sleep(1) - 1ms 不太可能在循环之外产生巨大影响

Debug.Write("") - 似乎没有输出任何内容。

【讨论】:

    【解决方案4】:

    这有一个合法的用例。 如果在感兴趣的语句之后需要一个临时断点并且这是 if 语句中的最后一行,则需要一个额外的 no-op 类型语句来放置临时断点。 在这种情况下,我使用:

    If someCondition >0 Then
    
        doSomething
        Space (1)    'Dummy line to place breakpoint
    End If
    

    这将返回一个包含一个空格的字符串,但不会将其分配给任何内容。我在 VBA 中使用它,但在 .net 中也支持它

    【讨论】:

      【解决方案5】:

      no-op 语句也有助于很好地记录代码并使其更易于理解。例如,您可以输入 A = A 之类的语句。

      例如:

      如果 MyNumber => 100 则 A = A
      其他:

      【讨论】:

        【解决方案6】:

        我的两分钱...

        您可以使用冒号将任何一系列命令组合到一行中:

        If False Then : End If
        Select Case False : Case Else : End Select
        

        我也把它做成了一个潜艇。然后它得到一个可识别的自己的名字:

        'Definition...
        Public Sub noop () 'Or Private, Protected, etc.
        End Sub
        
        'Usage...
        Sub Main()
            If sometest Then
                noop
            Else
                MsgBox "test is false"
            End If
        End Sub
        

        【讨论】:

          【解决方案7】:

          我知道这是一个旧查询,但是对于它的价值,我对原始问题的首选解决方案是 Debug.Assert (vbTrue)

          如果您愿意,您可以使用变量代替 vbTrue,然后通过更改一个变量来启用/禁用代码中的所有断点

          Dim bDisableBreakpoints as Boolean: bDisableBreakpoints = vbTrue
          'your code here
          Debug.Assert (bDisableBreakpoints)
          'rest of your code
          

          只需将 bDisableBreakpoints 更改为 vbFalse 即可在您使用过 Debug.Assert 的任何位置设置断点

          【讨论】:

            【解决方案8】:

            我个人最喜欢的是

            dim b=1
            

            然后我在那里放一个断点。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-08-01
              • 2014-02-22
              • 1970-01-01
              • 1970-01-01
              • 2011-07-16
              • 2016-02-12
              • 1970-01-01
              • 2013-05-17
              相关资源
              最近更新 更多