Вопрос об ошибке компиляции, связанной с использованием ключевого слова / зарезервированного слова "out" - PullRequest
0 голосов
/ 26 марта 2011

Здравствуйте. У меня ошибка с этим кодом:
" Параметр out 'o_BlockingSquaresArr' должен быть назначен до того, как элемент управления покинет текущий метод "
Теперь эта ошибка отображает каждый возвратописание каждого метода, кроме последнего с красным.
Я не понимаю, в чем проблема с моим конкретным кодом
Пожалуйста, помогите мне,
Заранее спасибо

internal bool isLegalMove(Square i_Move, out List<Square> o_BlockingSquaresArr) 
{
     bool result;

     if (m_GameBoard[i_Move.RowIndex, (int)i_Move.ColIndex].Coin != null)   
     {
          result = false;
          m_MessageBuffer = "You have enterd a square which is already
                             occupied, please try again...";       

          m_ErrorFlag=true;                                                                               
     }
     else
     {
          result = checkIfThereIsAtLeastOneSeqInOneDirection(i_Move,out o_BlockingSquaresArr);       
     }
     return result;

}

internal bool checkIfThereIsAtLeastOneSeqInOneDirection(Square i_Move, out List<Square> o_BlockingSquaresArr)
{
    const int k_EightDirections = 8;
    bool isSequenceFound, finalRes = false;

    for (int i = 1; i <= k_EightDirections; i++)    
    {
        isSequenceFound = checkOpponentSequenceInDirection(i_Move, (eDirections)i, out o_BlockingSquaresArr);     
        if (isSequenceFound)
        {
            finalRes = true;                                                                                      
        }                                                                                                         

    }
    return finalRes;
}

internal bool checkOpponentSequenceInDirection(Square i_Move, eDirections i_Direction, out List<Square> o_BlockingSquaresArr) 
{
     //I've shortened this code only relevant things  
     Square o_AdjacentSquare = new Square();
     adjacentCoin = doSwitchAndRetrieveAdjacentCoin(i_Move, i_Direction, out o_AdjacentSquare);

     // ...

     if (isThereAnOpponentSequence)
     {
          o_BlockingSquaresArr.Add(o_AdjacentSquare); 
     }
     return isThereAnOpponentSequence;
}

Ответы [ 5 ]

3 голосов
/ 26 марта 2011

Как говорит ошибка компилятора, параметр out должен быть обязательно назначен перед любым неисключительным возвратом метода. Я нигде не вижу любого назначения для o_BlockingSquaresArr. Почему вы даже объявляете его как out параметр для начала?

2 голосов
/ 26 марта 2011

Параметру out должно быть присвоено значение до возврата метода.В вашем методе isLegalMove o_BlockingSquaresArr назначается только в блоке else, поэтому компилятор обнаруживает, что в некоторых случаях он не инициализирован.Вы должны убедиться, что все пути кода в методе присваивают значение o_BlockingSquaresArr перед возвратом

1 голос
/ 26 марта 2011

Вам необходимо назначить что-то параметру out в каждом пути выполнения.В вашем случае вы забудете об этом в одном случае.Просто назначьте значение по умолчанию для начала метода, чтобы вы не столкнулись с ним.

Я не могу сказать вам, где вы не указали имя метода, в котором это происходит.

0 голосов
/ 26 марта 2011

Вам нужно назначить что-то параметрам out в каждом (обычно завершающем) коде. И ты этого не делаешь.

Например, в некоторых функциях вы назначаете только параметр внутри цикла for. И если цикл имеет 0 итераций, это никогда не произойдет.

0 голосов
/ 26 марта 2011

В функции IsLegalMove вам необходимо присвоить значение переменной o_BlockingSquaresArr

...