UGH! Ну, я был собираюсь опубликовать это как вопрос, потому что я не знал, почему я видел ошибку ... но, конечно, теперь это так очевидно, когда я это вижу. Похлопывая себя в голову сейчас. Хотя я оставлю его здесь для удовольствия. Посмотрите, можете ли вы это поймать.Почему этот метод с параметром «out» говорит, что он не установлен?
При внедрении TryGetValue для нашего класса WeakDictionary сегодня я столкнулся с чем-то странным. Я получаю сообщение об ошибке, и я не знаю, почему.
Вот код:
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;
}
Вот ошибка я получаю:
Выездное параметр «значение» должен быть назначен прежде чем управление покидает текущий метод.
Для меня это выглядит как все пути кода сделать набор «значение», прежде чем он вернется.
Если первое «если» не выполнено, предложение «else» устанавливает значение «.
Если первая «если» проходит, однако, следующая строка «weakReference.TryGetTarget» устанавливает «значение» по той же самой причине, о которой я предупреждаю (т. Е. «TryGetTarget» имеет параметр «out» сам, поэтому он тоже должен установить свой параметр внутри, прежде чем он вернется)?
Как я уже сказал, мне не хватало чего-то очевидного. (Мне нужно спать!)
В конце концов, это действительно просто опечатка. Скажите, что вы будете делать с постоянными предпочтениями (и автоматическим отступом кода), но именно поэтому я их использую. – user2864740
Я только что попробовал это в нескольких версиях Visual Studio, и он соответствующим образом откладывает инструкцию 'else' в соответствии со вторым оператором' if', делая очевидным, что он принадлежит этому. Вы используете другую среду IDE? –
Да, но эта простая опечатка сорвала меня на проклятый полчаса, исследуя ее, прежде чем я ударил лоб, поняв, что я идиот! :) – MarqueIV