Рейтинг:
2
OriginalGriff
В принципе, не используйте goto
вообще.
Если код, который вы использовали, является C++ и использует goto
тогда это, скорее всего, плохо спроектировано - вложение 5 глубоких циклов-плохой знак, но попытка "прыгнуть" в середину цикла-плохая идея и признак того, что исходный код был переведен с более раннего языка, возможно, даже ассемблерного кода.
C# имеет объем на goto
ярлыки, чтобы сделать такой код невозможным: вы можете использовать только goto
чтобы достичь метки в той же области или области "более высокого уровня", в которую встроен ток. Это сделано специально, чтобы предотвратить осложнения, которые могут вызвать такие скачки, и спагетти-код, который из них вытекает.
Я бы посоветовал вам взглянуть на исходный код, понять, что он делает, и разработать современный код C#, который не требует goto
вообще. Я использую C с 80 - х годов, C++ с 90-х годов и C# с 00-х годов-и ни разу мне не приходилось использовать a goto
в реальном коде!
Member 13569650
ваш комментарий мне известен.
и спасибо Вам за то, что вы мне это сказали.
кроме того, я думаю, что в редких случаях, как
в этом компилятор должен помочь
и разрешить это, если разработчик
возьмите на себя его риск.
опять я.
мое приложение mfc было построено в 2006 году
и обновлен в 2020 году с помощью tchar.h
все приложение составлено из методов и хорошо организовано.
во всех моих приложениях у меня есть этот сингл
идти к
Я много раз тестировал свое приложение
и его работа фантастическая.
l теперь я нахожусь в состоянии перестроить свои методы приложения таким образом, чтобы
убрать этот переход.
Большое спасибо!.
OriginalGriff
Нет, вся идея в том, что вы не пишете такой код - во всяком случае, с шестидесятых годов! :смеяться:
Проблема заключается в обслуживании - код, который прыгает в циклы, трудно изменить, трудно исправить: как вы уже видели, когда вы пытаетесь перевести его на C#.
Причем поддерживающая фаза разработки длится на порядки дольше, чем первоначальная фаза "кодирования".
Если вы все еще используете goto в современных структурированных языках, основанных на OOPs, таких как C# и C++ (черт возьми, даже в C!), то это подразумевает отсутствие понимания того, что такое структурированный дизайн и принципы OOPs. Просто потому, что вы *можете* что-то сделать, это не значит, что вы *должны*
Я не могу вспомнить ни одной компании, в которой я работал или выполнял работу за последние тридцать лет, где такой код имел бы хоть какой-то шанс пройти проверку кода!
Member 13569650
Я с тобой не согласен.
В очень очень редких случаях вы должны
используйте оператор goto, как я использовал.
Скажем вы хотите написать заявление
которые используют структурированный алгоритм
во вложенных циклах (скажем, вы не нашли алгоритм не вложенных циклов)
у вас есть 2 варианта.
1 продолжайте искать алгоритм не вложенных циклов независимо от того как долго
это займет много времени.
2 Используйте goto . и продолжайте поиски.
Я выбираю вариант 2.
Примечание: приложение должно проверять каждый
алгоритм цикла и если проверка
это нормально, что мы перестаем ездить на велосипеде.
а также мы не можем спасти и тогда
езда на велосипеде потому что это большие циклы
спасибо
OriginalGriff
Вы можете не соглашаться, но я почти уверен, что я на стороне большинства здесь! :смеяться:
Давайте посмотрим: я отправил код в гостиную и попросил комментарии:
https://www.codeproject.com/Messages/5754427/Would-this-pass-code-review-where-you-are
OriginalGriff
Ваше пересмотренное описание добавляет Это:
"Примечание: приложение должно проверять каждый
алгоритм цикла и если проверка
это нормально, что мы перестаем ездить на велосипеде.
а также мы не можем спасти и тогда
езда на велосипеде потому что это большие циклы"
Это еще хуже, потому что вы ожидаете, что значения локальных переменных будут сохранены от вызова к вызову (или вы используете все "глобальные" переменные), а этого просто не произойдет!
Есть гораздо лучшие, более современные способы "приостановить обработку и возобновить позже", такие как IEnumerables, Yield returns и так далее:
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/yield
Вместо того чтобы цепляться за "это сработало так, поэтому я сделаю это так", прочитайте то, что я сказал ранее: "я бы предложил вам посмотреть на исходный код, понять, что он делает, и разработать современный код C#, который вообще не требует goto."
Member 13569650
Мольбы не забывайте об этом
оригинальное приложение завершено
и работает фантастически
с 2006 года и проверено
много много раз по тысяче
раз и всегда отдавай
правильный выход.
моя единственная проблема-это переезд
это к с#
Рейтинг:
1
GenJerDan
Это, по сути, то, что вы хотите, чтобы произошло? Гото не нужно.
getSeries()
{
if (flag == pass)
{
ep;
}
else
{
for i1 ...
...
for i2 ...
...
for i3 ...
...
for i4 ...
.
.
.
for ...
{
...
return;
ep;
}
}
}
} //didn't count braces, may not match up
}// end of getSeries()
Member 13569650
да
но в другом варианте
Я хочу быть в самой замкнутой петле
потому что там у меня есть вход
из алгоритма
Maciej Los
- Сомневаюсь. Этот:
if (flag == pass)
{
ep;
}
else
{
...
}
можно укоротить этот путь:
if (flag == pass) return; // ;)
Member 13569650
Привет
дискуссия здесь заставляет меня
вынужден искать решение.
Я изменил некоторые методы
и добавьте некоторые манипулируемые методы.
и поместите их в самую инерционную петлю
большое вам спасибо за то, что сделали
меня заставят дотянуться
это решение.
спасибо