UGH!那麼我是要張貼這個問題,因爲我不知道爲什麼我看到了錯誤...但當然,現在它是如此明顯,當我看到它。現在把自己拍在頭上。儘管如此,我仍然會把它留在這裏。看看你能否抓住它。爲什麼這個方法有一個'out'參數表示它沒有設置?
在今晚爲WeakDictionary類實現TryGetValue時,我遇到了一些奇怪的事情。我收到一個錯誤,我不知道爲什麼。
下面的代碼:
public bool TryGetValue(TKey key, out TItem value)
{
WeakReference<TItem> weakReference;
if(_itemStorage.TryGetValue(key, out weakReference))
if(weakReference.TryGetTarget(out value))
return true;
else
value = default(TItem);
return false;
}
這裏是我得到的錯誤:
的輸出參數「價值」必須被分配到控制離開當前方法之前。
對我來說,它看起來像所有代碼路徑做設置「值」它返回之前。
如果第一個'if'失敗,'else'從句設置'value'。
但是,如果第一個'if'通過,不過下一行'weakReference.TryGetTarget'設置'value'的原因與我被警告的原因完全相同(即'TryGetTarget'有'out'參數本身,因此它也必須在返回之前在內部設置它的參數)?
就像我說的,我錯過了一些明顯的東西。 (我需要睡覺!)
在一天結束時,這實際上只是一個簡單的錯字。說一下總是使用大括號首選項(和自動代碼縮進),但這就是我使用它們的原因。 – user2864740
我剛剛在Visual Studio的多個版本中嘗試過這種方法,它正確縮進了'else'語句,與第二個'if'語句保持一致,顯然它屬於那個。你在使用另一個IDE嗎? –
是的,但是那個簡單的錯字讓我在一個半小時的時間裏讓我失去了研究,因爲我打了我的額頭,意識到我是個白癡! :) – MarqueIV