在C#中,什么是简单的Noop语句,它不需要实现一个方法?(内联/lambda方法可行)
我的当前用例:我想占用try-catch的catch块,以便在调试时可以进入该块并检查异常。
我知道我应该处理/记录异常,但这不是本练习的重点。
var x = 0;
运作得非常好 :)
x++;
。我想确保编译器不会将其清除。 - Chris Marisic
_ = "";
当您想确认有返回值,但不需要或不想使用时,可以使用_。它可以使编译器安静下来,不会提示您未获取返回值。
您是否试图调试一个发布(优化)版本的构建?通常是优化器删除未引用的变量和空块。
有两种解决方案:
catch
本身上设置断点,并在Locals工具窗口中使用由调试器创建的$exception
来引用正在执行的异常。在C#中,NOP(无操作)与C语言中一样,表示为';'
,其正确定义是“空语句”,但是对于你想要的用法,只需要在catch的右括号处设置断点即可。由于调试器附加时方法中对象引用的生命周期延长到方法的结尾,因此无需保持任何东西的活动状态。所以你只需要编写:
catch(Exception exception)
{
}
在闭合括号上设置断点,并查看异常内容。
;
,Visual Studio会自动跳过它。 - Protector one;
称作 nop。nop 是什么都不做的东西,但是单独的 ;
根本什么也不是 :) - porges((Action)(() => { }))();
<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>noop</Title>
<Shortcut>noop</Shortcut>
<Description>Code snippet to inject an assembly (x86) equivalent of the NOOP command into the code's disassembly.</Description>
<Author>Jay Whaley</Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Code Language="csharp">
<![CDATA[// Forces a psuedo NOOP in disassembly
((Action)(() => { }))();
$end$]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
这是我在为单元测试编写一些“虚拟对象”时所做的事情,其中一些方法需要保留为空白。
public void SetToken(string token)
{
// Method intentionally left empty
}
我按照智能感知提示得到了上述结果。我的开发环境是Visual Studio 2022。
可靠的解决方案
try
{
blablablablaStatemnt();
}
catch(Exception ex)
{
#IF DEBUG
Debugger.Break();
#END IF
}
就这么简单!
否则
非常有用;
我非常喜欢这个,因为它会让遇到它的人感到困惑:
catch (SomeException e)
{
lock(e);
}
}
上? - George Duckettcatch (...)
处打断点并单步执行。 - porges}
的边缘。你可以尝试使用catch (Exception e) {{{{{{{{{{ }}}}}}}}}}
来更紧密地控制。 - porgescatch (Exception e) {}
会被简化为catch {}
。 - Jonathan Dickinson