Почему этот код C # не компилируется? - PullRequest
3 голосов
/ 27 сентября 2010

Почему этот код C # не компилируется?

public static Dictionary<short, MemoryBuffer> GetBulkCustom(int bufferId,
    int startSecond,out int chunksize, out int bardatetime)
{
    //const string _functionName = "GetNextBulkWatchData";

    UserSeriesCard currentCard = GetUserSeriesCard(bufferId);

    Dictionary<short, MemoryBuffer> result = null;

    while (currentCard.CurrentSecond <= startSecond)
        result = GetBulk(bufferId, out chunksize, out bardatetime);

    if (result == null)
    {
        result = currentCard.UserBuffer;
        chunksize = currentCard.ChunkSize;
        bardatetime = currentCard.CurrentBarDateTime;
    }
    return result;
}

Ошибка:

The out parameter 'bardatetime' must be assigned to before control leaves the current method
The out parameter 'chunksize' must be assigned to before control leaves the current method

Я не могу вспомнить случай, когда bardatetime и chunksize останутся неназначенными ..

Редактировать . Я исправил эту ошибку, изменив код на логически эквивалентный. Честно говоря, я хотел избежать нескольких назначений.

public static Dictionary<short, MemoryBuffer> GetBulkCustom(int bufferId, int startSecond,out int chunksize, out int bardatetime )
    {
        const string _functionName = "GetNextBulkWatchData";

        UserSeriesCard currentCard = GetUserSeriesCard(bufferId);

        Dictionary<short, MemoryBuffer> result = null;
        chunksize = currentCard.ChunkSize;
        bardatetime = currentCard.CurrentBarDateTime;

        while (currentCard.CurrentSecond <= startSecond)
            result = GetBulk(bufferId, out chunksize, out bardatetime);

        if (result == null)
            result = currentCard.UserBuffer;

        return result;
    }

Ответы [ 11 ]

0 голосов
/ 27 сентября 2010

Если currentCard.CardSecond <= startSecond, цикл while не будет выполняться, результат будет нулевым, а значения никогда не будут установлены. Как компилятор знает, что будет .CardSecond и startSecond? </p>

...