2011-12-12 47 views
0

我有以下代碼...後來代碼影響前面的代碼,調試器會在代碼塊不應當進入

var len = request.Code.Trim().Length; 
if (len.Equals(0)) 
{ 
    throw new ArgumentOutOfRangeException("request.Code"); 
} 

try 
{ 
    var obj = _repository.GetSomething(request.Code); 
    return Result.Success(obj); 
} 
catch (Exception) 
{ 
    return Result.Failure(MessageCode.MissingData); 
} 

我通過這個代碼調試器中運行(通過單元測試),當len爲3時,它將進入if (len.Equals(0))塊。我也嘗試將if語句更改爲if (string.IsNullOrWhitespace(request.Code)),並且我遇到同樣的問題。

如果我刪除try/catch並在代碼塊中留下代碼,一切都很好。

那麼,任何人都可以解釋這裏究竟發生了什麼?

編輯: 澄清request.Code的值是「WH1」,因此len爲3這是什麼調試器告訴我,就在我試圖跨過if語句。

編輯2: 我得到了一個失敗的測試,這導致我調試此代碼。但是現在測試正在通過,我改變了另一段未在我的問題中顯示的代碼。我所有的測試都通過了,但是當我通過它進行調試時,調試器仍然看起來好像它正在執行第一個if塊內的throw。非常混亂,但是如果我繼續按照我的預期繼續發表聲明。

它似乎是調試器中某種類型的錯誤,因爲代碼沒有被執行,只是光標正在執行該代碼並且沒有執行任何操作。

+0

你的問題是什麼? request.Code的值是什麼,以及您預期的檢查結果是什麼:if(string.IsNullOrWhitespace(request.Code))? –

+0

@DavidePiras我已經爲我的問題添加了一點澄清。 –

+0

你沒有隱藏的;在if語句之後 - 也許在屏幕的右側? – Jimmy

回答

0

代碼根本沒有運行,調試器只是去那條線,但沒有實際執行代碼。

+0

你是怎麼確定這是你的問題? –

+0

當我看着我的手錶,我可以看到代碼並沒有被執行 –

0

如果代碼與被調試的代碼不匹配,我以前遇到過這種情況。您是使用「附加到進程」來調試進程還是剛進入調試菜單並選擇「開始調試」(F5)?您在代碼中顯示的代碼是否超出了您正在調試的項目的一部分或者是否在相關程序集中?

您也可以嘗試重新構建整個解決方案。