为什么在linq语句中忽略DebuggerStepThrough?

时间:2013-07-23 01:29:20

标签: c# visual-studio-2010 linq debugging breakpoints

在逐步执行我的代码时,我发现内部某些行忽略了DebuggerStepThrough属性。它似乎是在linq声明中。

以下是类似的SO:DebuggerStepThrough being ignored

正在逐步执行的代码处于调试模式。它与下面的ReflectionHelper方法在同一解决方案中。项目引用是通过项目而不是其他地方的编译dll,即与项目相同的输出bin / debug文件夹。没有其他任何异常情况发生,这可能表明正在使用的程序集是一个不同的程序,因为在项目方面进行代码更改时会注意到。

因此,当我逐步使用 F11 时,它会进入下面的代码。

我的public static class ReflectionHelper

中有以下内容
[DebuggerStepThrough]
public static bool Exists(string propertyName, object srcObject)
{
    PropertyInfo propInfoSrcObj = srcObject.GetType().GetProperties()
        .FirstOrDefault(p => p.Name == propertyName); //-- Debugger stops here
    return (propInfoSrcObj != null);
}

enter image description here 如何避免此代码单步执行?我目前的工作是 SHIFT + F11 退出,然后用 F11 恢复调试。

发生这种情况的另一个例子是这段代码。

string databaseNamePair = split.Find(f => f.StartsWith("Initial Catalog")); 

1 个答案:

答案 0 :(得分:2)

那些Linq语句包含编译为方法调用的lambda表达式。因此,该属性不适用于这些不同的方法。

我想你可以将lambdas变成完全成熟的方法,这样你就可以使用该属性标记它们,但它会使代码变得模糊。