2013-07-23 39 views
2

在逐句通過我的代碼時,我發現某些行忽略了DebuggerStepThrough屬性。它似乎是在linq聲明中。爲什麼在linq語句中忽略DebuggerStepThrough?

這裏是一個類似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")); 

回答

2

那些Linq語句包含編譯爲方法調用的lambda表達式。因此,該屬性不適用於這些不同的方法。

我想你可以把lambda轉化爲全面的方法,這樣你就可以用這個屬性來標記它們,但是它會爲富有代碼做出貢獻。

+0

大聲笑,我已經擁有了它。我把它變成了'fugly'代碼! R#8函數'將LINQ轉換爲代碼'。 –