うーん!エラーが表示された理由がわからなかったので、これを質問として投稿するつもりでした...しかし、もちろん、それを見ると明らかです。今頭を叩いてます。楽しみのためにここに残しておきます。あなたがそれをキャッチできるかどうかを確認してください。
今夜、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;
}
これが私が得ているエラーです:
制御が現在のメソッドを離れる前に、out パラメータ 'value' を割り当てる必要があります。
私には、すべてのコードパスが戻る前に「値」を設定しているように見えます。
最初の 'if' が失敗した場合、'else' 句は 'value' を設定します。
ただし、最初の「if」が合格した場合、次の行「weakReference.TryGetTarget」は、警告されているのとまったく同じ理由で「値」を設定しません(つまり、「TryGetTarget」には「out」パラメーター自体があるため、戻る前に out パラメータを内部的に設定する必要があります)?
私が言ったように、私は明らかな何かを見逃していました。(睡眠が必要だ!)