2015-07-16 3 views
1

Я использую goto внутри оператора switch, чтобы эмулировать падение через поведение.C# - goto внутри оператора switch hangs

. В моем заявлении о переключении используется enum, чтобы определить, какой случай использовать. Когда выполняется случай, содержащий goto, выполнение выполняется в этом месте, и процесс хостинга начинает использовать намного больше процессора.

Мой код выглядит примерно так:

switch (myEnum) 
{ 
    case HostClass.EnumType.var1: goto case HostClass.EnumType.var2; 
    case HostClass.EnumType.var2: myint = 3; break; 
    default: break; 
} 

Почему мой переключатель заявление висит на Гото? Читайте онлайн, это, кажется, общий шаблон.

Снятие goto исправляет его, но я не понимаю, почему.

+0

Какова ценность EnumType.var1 и var2? Пожалуйста, разместите объявление этого перечня. –

+5

IT не вешает на goto, не может воспроизвести! – Habib

+0

Попробуйте создать [MCVE] (http://stackoverflow.com/help/mcve). Или, если это не так, отправьте фактический код, где вы обнаружили это и имеете эту проблему. –

ответ

9

Вам не нужно goto. Просто сделайте это:

switch (myEnum) 
{ 
    case HostClass.EnumType.var1: 
    case HostClass.EnumType.var2: 
     myint = 3; break; 
    default: break; 
} 

Обновление

ОК, так что причина (я считаю) это не работает, потому что вам нужно месту к goto. Например:

for(var i = 0; i < 100; i+=1) 
{ 
    if(i == 50) 
    { 
     goto Outer; 
    } 
} 

Outer: 
Console.WriteLine("Done"); 

Это очень надуманный пример.

Я не думаю, что это объясняет, почему ваш код висит. Единственное, о чем я могу думать, это то, что goto ждет адрес?

Как упоминалось в комментариях NeilP, вы можете провалиться только на пустые case-утверждения. Это все еще не объясняет, почему ваш код зависает на 'goto'. Это не должно.

+2

«Удаление goto исправляет это, но я не понимаю, почему «. – Sayse

+0

Да - извините, я этого не видел. – simonlchilds

+1

Итак, добавление точки с запятой в первый случай не допускается, потому что «Control не может провалиться с одного ярлыка случая (« случай 1: »)« Но без точки с запятой это работает. Я получаю это сейчас! –

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