yield return с помощью try catch, как я могу решить эту проблему

У меня была та же проблема. Я попробовал все, но только на j-порте микрона на моем asus p5k у меня не было ошибок.

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

21
задан Khh 21 February 2011 в 14:54
поделиться

1 ответ

Попытайтесь использовать локальную функцию в рамках метода перечислителя: переместите контент попытки.. поймайте к локальной функции, затем вызовите функцию из попытки.. выгода.

Используя Ваш пример:

public IEnumerable<string> YourFunction()
{
    // do stuff...

    try
    {
       // Move the try..catch content to the local function
       return getStrings()
    }
    catch (Exception ex)
    {
        throw ExceptionMapper.Map(ex, file.FullName)
    }

    // The local function
    IEnumerable<string> getStrings()
    {
       using (StreamReader stream = new StreamReader(file.OpenRead(), Encoding))
       {
           char[] buffer = new char[chunksize];
           while (stream.Peek() >= 0)
           {
              int readCount = stream.Read(buffer, 0, chunksize);

              yield return new string(buffer, 0, readCount);
           }
        }
    }

}

Используя локальную функцию на самом деле хорошая идея в большом количестве случаев. Используя этот шаблон может вынудить метод сразу проверить аргументы вместо того, чтобы ожидать, пока вызывающая сторона не начинает перечисление ( Рослин, предупреждающий RCS1227).

0
ответ дан 29 November 2019 в 06:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: