2013-11-16 17 views
1

Я просмотрел похожие вопросы и ответы, но я до сих пор не вижу проблемы в своем коде. У меня есть переключатель заявление и здесь:Невозможно поставить «по умолчанию» для переключения блока

switch (header) 
     { 
      case Headers.Queue: 
       { 
        int id = pr.ReadInt32(); 
        string fileName = pr.ReadString(); 
        long length = pr.ReadInt64(); 

        TransferQueue queue = TransferQueue.CreateDownloadQueue(this, id, Path.Combine(downloadDirectory, 
         Path.GetFileName(fileName)), length); 

        _transfers.Add(id, queue); 

        if (Queued != null) 
        { 
         Queued(this, queue); 
        } 
       } 
       break; 
      case Headers.Start: 
       { 
        int id = pr.ReadInt32(); 

        if (_transfers.ContainsKey(id)) 
        { 
         _transfers[id].Start(); 
        } 
       } 
       break; 
      case Headers.Chunk: 
       { 
        int id = pr.ReadInt32(); 
        long index = pr.ReadInt64(); 
        int size = pr.ReadInt32(); 
        byte[] buffer = pr.ReadBytes(size); 

        TransferQueue queue = _transfers[id]; 

        queue.Write(buffer, index); 

        queue.Progress = (int)((queue.Transferred * 100)/queue.Length); 
        if (queue.LastProgress < queue.Progress) 
        { 
         queue.LastProgress = queue.Progress; 

         if (ProgressChanged != null) 
         { 
          ProgressChanged(this, queue); 
         } 

         if (queue.Progress == 100) 
         { 
          queue.Close(); 

          if (Complete != null) 
          { 
           Complete(this, queue); 
          } 
         } 
        } 
       } 
       break; 
      default: 
       { 

       } 
     } 

Проблема заключается в том, блок по умолчанию выдает ошибку о том, что

Контроль не может провалиться из одного дела этикетке («по умолчанию:») к другое

Может ли кто-нибудь мне помочь?

Благодаря

+1

посмотрим на то, как работает оператор переключатель http://msdn.microsoft.com/en-us/library/ 06tc147t (v = vs.90) .aspx – Ric

+1

Добавить перерыв для инструкции по умолчанию – MKS

+0

Да, глупая ошибка, спасибо – yrazlik

ответ

5

Вы должны добавить break; для default случае.

+0

да, глупая ошибка спасибо – yrazlik

+0

Im на iPad сом форматирование как минимум .. Sry –

+0

Не совсем, вы можете иметь 'return',' throw' и т. Д. –

3

Каждый switch случае требуется иметь transfer control [break, return, throw], поскольку это не позволяет fall through.

добавить break (Аспер код) для default случае тоже, как beow:

default: 
     { 

     } 
break; 
+0

Не правда, вы можете заставить его работать без 'break'. –

+0

@SriramSakthivel: Спасибо за ваши ценные материалы. –

+0

, и вы также можете иметь goto и бесконечный цикл. Компилятор будет с удовольствием скомпилировать с этим :) –

Смежные вопросы