什么构成Visual Studio 2010中的代码块?

Cal*_*vin 5 block visual-studio-2010

根据MSDN:

代码块是具有单个入口点,单个出口点和一组全部按顺序运行的指令的代码路径.代码块在到达决策点时结束,例如新的条件语句块,函数调用,异常抛出,enter,leave,try,catch或finally构造.

考虑到这一点,我仍然不知道为什么,根据VS2010的代码覆盖率分析,这个方法有三个块:

public Type Foo()
{
     return typeof(string);
}
Run Code Online (Sandbox Code Playgroud)

这个方法有两个块:

public void FooTwo()
{
     return;
}
Run Code Online (Sandbox Code Playgroud)

代码行更直接.它们是包含大括号的代码行数.但什么是代码块?

卡尔文

Cal*_*vin 0

代码块是指公共中间语言/微软中间语言级别的连续路径。不幸的是,上面的 MSDN 文章中没有提到这一点。

微软专家们在这里给出了很好的解释:

http://www.testingmentor.com/imtesty/2009/11/18/basic-blocks-arent-so-basic/

http://blogs.msdn.com/b/scarroll/archive/2005/01/14/353427.aspx?wa=wsignin1.0

简而言之,仔细计算 CIL 代码块是没有意义的。它们与我们编写的代码位于不同的平面上,甚至可以根据您的编译是调试还是发布而有所不同。