Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
Заблокирован

Как получить внутри метода имя фактического параметра?

22.12.2017, 18:31. Показов 4011. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Метод в программе вызывается неоднократно с разными фактическими параметрами. Как внутри метода получить имя фактического параметра?
(Это для отладки удобно было бы)
Если прямо это невозможно, то для параметров (например, массивов), передаваемых по ссылке, можно, наверное, использовать
метод Equals(Object) с тем, чтобы провести проверку на все фактические параметры (их перечень, естественно известен)?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.12.2017, 18:31
Ответы с готовыми решениями:

Как получить имя метода?
Как возможно получить имя метода. Для примера Class A1 { void Method1() { } } Как можно получить его имя. В виде string...

Лямбда выражение в качестве параметра метода. Как получить свойство с которым производится операция?
Добрый день! Нужно в методе принимать лямбду: obj.Get(x=>x.ParentId==5); Как мне из этой лямбды в методе Get получить...

Как можно изменить значение фактического параметра подпрограммы в теле самой подпрограммы?
1. Как можно изменить значение фактического параметра подпрограммы в теле самой подпрограммы? 2. Можно ли использовать подпрограмму без...

43
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
23.12.2017, 15:16
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от titan4ik Посмотреть сообщение
Но он требует бОльшего вмешательства в исходный код
Т.е. сравнивать по Object, написав тем самым всё те же строчки лучше чем написать в методе nameof()? Ибо количественно вы делаете ту же работу. Странно.
И, кстати, а не вы ли этот исходный код сейчас пишете? Сами же сказали - с фортрана.
0
Заблокирован
23.12.2017, 15:53  [ТС]
Цитата Сообщение от skilllab Посмотреть сообщение
Т.е. сравнивать по Object, написав тем самым всё те же строчки лучше чем написать в методе nameof()?
Там нюансы есть конкретные. Имена фактических параметров (аргументов - там порядка 10 массивов передаётся) при разных вызовах имеют отличие всего в одной букве.
В коде метода достаточно сравнить 1 параметр методом Equals с известным набором возможных аргументов этого формального параметра - по результату я присваиваю переменной char тот или иной символ, который встраивается в строку вывода. И в файл выводятся имена использованных при данном вызове аргументов. Мне так показалось удобнее.

Добавлено через 6 минут
Например,
имена формальных параметров (массивов)
a0, a1, a2, a3, a4, a5, a6, a7, a8, a9
а фактические параметры (аргументы):
as0, as1, as2, as3, as4, as5, as6, as7, as8, as9
ad0, ad1, ad2, ad3, ad4, ad5, ad6, ad7, ad8, ad9
af0, af1, af2, af3, af4, af5, af6, af7, af8, af9
если проверить a0 на эквивалентность as0, ad0 и af0 то по результату можно символьной переменной присвоить s, d или f и соответствующим образом сформировать строку вывода.
0
Эксперт .NET
 Аватар для Usaga
14817 / 9593 / 1369
Регистрация: 21.01.2016
Сообщений: 36,123
23.12.2017, 16:44
Цитата Сообщение от titan4ik Посмотреть сообщение
аргументов - там порядка 10 массивов передаётся
Это конское дерьмо, серьёзно. И ваши методы сбора телеметрии, как следствие, тоже так себе.

Я настоятельно рекомендую переписывать всё, что возможно в нормальном стиле. Методы отладки нормального кода на порядок проще и легче, чем возня с такой хренью.

Добавлено через 3 минуты
Серьёзно, если взялись старый код переписывать, то его нужно и модифицировать. А если всё переносить один к одному, то не проще ли старый код оставить? Иначе, какой смысл переписывать?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18424 / 14354 / 5372
Регистрация: 17.03.2014
Сообщений: 29,039
Записей в блоге: 1
23.12.2017, 16:56
Цитата Сообщение от Usaga Посмотреть сообщение
А если всё переносить один к одному, то не проще ли старый код оставить? Иначе, какой смысл переписывать?
По моему ты напрасно критикуешь подход ТС. Он же сказал что на данный момент главное чтобы код работал. Рефакторингом проще будет заняться в рамках уже рабочего C# кода. Это не самый лучший и правильный подход, но он имеет право на существование.
0
Эксперт .NET
 Аватар для Usaga
14817 / 9593 / 1369
Регистрация: 21.01.2016
Сообщений: 36,123
23.12.2017, 16:59
OwenGlendower, я не согласен. Оригинальный код работает. Его можно и оставить. А если браться переписывать, то с целью улучшения, так ведь? Если в конечном итоге получится тоже самое дерьмо, то что это даст, кроме затраченного времени?

Добавлено через 1 минуту
Я про то, что перенос кода на другую платфому - офигеннейший повод для хоть какого-то рефакторинга. От этого толку будет больше, чем от внедрения сомнительных способов снятия телеметрии. Нормальный код не нужно покрывать телеметрией...
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18424 / 14354 / 5372
Регистрация: 17.03.2014
Сообщений: 29,039
Записей в блоге: 1
23.12.2017, 17:00
Usaga, согласен, но если ТС считает что ему так сейчас удобнее, но пускай делает именно так. Тем более что он уже в процессе переписывания.
1
Эксперт .NET
 Аватар для Usaga
14817 / 9593 / 1369
Регистрация: 21.01.2016
Сообщений: 36,123
23.12.2017, 17:03
Цитата Сообщение от OwenGlendower Посмотреть сообщение
По моему ты напрасно критикуешь подход ТС.
Я критикую исходя из собственного опыта. Мы переносили старое дерьм один-к-одиному. И что мы получили в итоге, угадайте?)

Добавлено через 2 минуты
Цитата Сообщение от OwenGlendower Посмотреть сообщение
если ТС считает что ему так сейчас удобнее
Он за советом обратился. Но совет не обязательно должен строго вписываться в его хотелки. В конце концов, я стараюсь дать рекомендацию, дающуюю наиболее полезный эффект. И моё решение: не пытаться копаться в фигне, а исправлять фигню.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18424 / 14354 / 5372
Регистрация: 17.03.2014
Сообщений: 29,039
Записей в блоге: 1
23.12.2017, 17:10
Usaga, мне тоже приходидось переписывать чужой код. И я сначала полностью разбирался как работает старый, а потом писал его заново. Соответственно ты полностью прав советуя переписать с нуля, вместо переноса один-в-один. Но ситуации бывают разные. И иногда, я готов допустить такую вероятность, лучше может оказаться подход ТСа. Кроме того на данном этапе совет переписать заново означает также отказ от уже сделанной работы и необходимость начать всё заново. Не факт что такая возможность есть. Особенно если программа уже почти переписана.

В итоге - я не говорю что не прав советуя переписать с нуля. Только что не нужно так упорно советовать решение которое ТС не хочет применять. Я думаю он прекрасно понял твой совет. И раз он не хочет им воспользоваться, то, как говорится, хозяин - барин.
1
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
23.12.2017, 17:15
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Тем более что он уже в процессе переписывания.
Во-во. Именно благодаря такому подходу (перепись в лоб) я пару раз только и смог разобрать логику другого приложения. И потом код из 100 строк чудом превращался в 10)))
Так что советы в стиле "дерьмо архитектура" советы в никуда. Архитектура дерьмовая, потому что не твоя.
0
Эксперт .NET
 Аватар для Usaga
14817 / 9593 / 1369
Регистрация: 21.01.2016
Сообщений: 36,123
23.12.2017, 17:15
OwenGlendower, я не советую переписывать с нуля всё. Советую пересывать всё, что можно (легко). Перепись с нуля - дорогое удовольствие. Но отдельные моменты - вполне себе нормально. 10 массивов передавать в метод - хрень чистой воды. Как с этим работать можно? Дичь же. Я за разумный подход. И перенос один-в-один считаю не разумным подходом.

Вы сами посмотрите, на что такое говнокод ТС-а сподвигает)
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
23.12.2017, 17:17
Цитата Сообщение от titan4ik Посмотреть сообщение
можно символьной переменной присвоить s, d или f
Это уже какие-то выкрутасы. Они точно лучше обычного привычного дебага?
0
Эксперт .NET
 Аватар для Usaga
14817 / 9593 / 1369
Регистрация: 21.01.2016
Сообщений: 36,123
23.12.2017, 17:18
Цитата Сообщение от skilllab Посмотреть сообщение
Так что советы в стиле "дерьмо архитектура" советы в никуда. Архитектура дерьмовая, потому что не твоя.
Когда я упоминал про "дерьмовую архитектуру", то тонко намекал, что в процессе переноса не плохо было бы задействовать мозг головы. И поправить те моменты, что можно. Тем самым сильно снизив дерьмовость.

Почему мои советы так радикально вопринимаются?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18424 / 14354 / 5372
Регистрация: 17.03.2014
Сообщений: 29,039
Записей в блоге: 1
23.12.2017, 17:22
Цитата Сообщение от Usaga Посмотреть сообщение
я не советую переписывать с нуля всё. Советую пересывать всё, что можно (легко).
Под этим подпишусь.

Цитата Сообщение от Usaga Посмотреть сообщение
10 массивов передавать в метод - хрень чистой воды. Как с этим работать можно? Дичь же.
Фортран процедурный язык. Для него это норма. Дичью скорее является куча глобальных изменяемых переменных.

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от Usaga Посмотреть сообщение
Почему мои советы так радикально вопринимаются?
Потому у тебя аватарка со Стьюи Гриффином :p
Шутка :)

1
Эксперт .NET
 Аватар для Usaga
14817 / 9593 / 1369
Регистрация: 21.01.2016
Сообщений: 36,123
23.12.2017, 17:25
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Фортран процедурный язык.
Вот о чём и речь. Не включая голову нормально код не перенести. Проще старый использовать. А если взялся переносить, то нужно рефакторить по ходу дела. Внешний положительный эффект будет больше.

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от OwenGlendower Посмотреть сообщение
Потому у тебя аватарка со Стьюи Гриффином
Ясно :)

1
Заблокирован
23.12.2017, 19:10  [ТС]
На самом деле, согласен со всеми. Сейчас вижу, что действовал не оптимально. Но "работа" уже сделана. Бог даст заработает. Ещё раз - спасибо!)

Добавлено через 8 минут
Поясню.
P.S. Старый код работал в незапамятные времена. Я не смог его запустить, были проблемы кое-какие (я не гуру, а это очень старая версия фортрана), и я махнул на это рукой. А зря - нужно было добиться его работоспособности. Наверное придется это сделать теперь. Хотя не факт, что у меня именно работоспособная версия программы. В одной ветке кода управление передается по оператору GO TO прямо в тело цикла(???) Такое не могло же быть работоспособным. Мда.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18424 / 14354 / 5372
Регистрация: 17.03.2014
Сообщений: 29,039
Записей в блоге: 1
23.12.2017, 19:21
Цитата Сообщение от titan4ik Посмотреть сообщение
В одной ветке кода управление передается по оператору goto прямо в тело цикла(???)
К сожалению могло и работало. Некоторые ЯП такое позволяли и позволяют. Что именно происходило в таком случае зависит от языка, версии компилятора и текущей фазы Луны. Как именно это делал (делает?) Фортан лучше спросить у специалистов.
1
Эксперт .NET
 Аватар для Usaga
14817 / 9593 / 1369
Регистрация: 21.01.2016
Сообщений: 36,123
24.12.2017, 06:49
Цитата Сообщение от titan4ik Посмотреть сообщение
Такое не могло же быть работоспособным. Мда.
Похоже вы в самом фортране не особо разбираетесь. Как же вы, тогда переписывать собрались программу? С другой стороны, если вы разбираетесь на достаточном уровне, то что могло помешать запустить программу? Помоему, круг замкнулся...

Добавлено через 7 минут
titan4ik, я вижу два выхода из вашей ситуации:
1) Пофиксить баги в самом приложении на фортране. Код уже есть и, скорее всего, рабочий. Отремонтировать (если есть что) будет дешевле полного переписывания;
2) Переписать на C#, но полностью отрефакторив. Переписывать один-в-один - тупо. Вы ведь получите тоже самое, что было в самом начале (включая баги и дерьмокод). Профит нулевой.
0
Заблокирован
24.12.2017, 10:58  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Похоже вы в самом фортране не особо разбираетесь.
Да, в общих чертах. Но я задавал этот вопрос тут в ветке фортрана.
Передача управления в тело цикла
И понял так, что никто не высказался за то, что по GO TO можно передавать управление в тело цикла без особого условия (условие в том, что до этого этот цикл уже начал свое исполнение и потом управление было передано вовне цикла, а потом уже опять внутрь), которое в моем случае отсутствует.
У вас другое мнение на этот счет?
Цитата Сообщение от Usaga Посмотреть сообщение
Пофиксить баги в самом приложении на фортране. Код уже есть и, скорее всего, рабочий. Отремонтировать
Да, возможно, предприму такую попытку. Но программка на c# уже подает хорошие признаки жизни, с момента организации этой темы дело хорошо продвинулось)
Цитата Сообщение от Usaga Посмотреть сообщение
Переписывать один-в-один - тупо.
Ну, кое-что я подправил, естественно. То что требовало этого безусловно.
Прежде всего, с самого начала пришлось многомерные массивы подрихтовать, ведь в фортране они заполняются по столбцам, а в c# по строкам и ввод-вывод и т.п.
0
Эксперт .NET
 Аватар для Usaga
14817 / 9593 / 1369
Регистрация: 21.01.2016
Сообщений: 36,123
24.12.2017, 13:32
Цитата Сообщение от titan4ik Посмотреть сообщение
У вас другое мнение на этот счет?
Нет. Я не разбираюсь в фортране.

У меня вполне конкретное мнение по поводу заданного вами вопроса в шапке темы. И это мнение я уже озвучил)
0
Заблокирован
24.12.2017, 22:38  [ТС]
Понял, а я решил, что это
Цитата Сообщение от Usaga Посмотреть сообщение
Похоже вы в самом фортране не особо разбираетесь
означает,что вы увидели какую-то глупость с моей стороны по части заявления о том, что меня смутила передача управления в тело цикла в фортрановских исходниках и готовы прояснить этот вопрос.
Цитата Сообщение от Usaga Посмотреть сообщение
У меня вполне конкретное мнение по поводу заданного вами вопроса в шапке темы. И это мнение я уже озвучил)
Да, с этим уже давно можно ставить точку.
Всем спасибо.

Добавлено через 7 часов 3 минуты
В принципе как бы это моё личное дело, но поскольку многие приняли живое участие, сообщаю. Основной код заработал! Ура. Тест, сохранившийся с незапамятных времен показал, что считает правильно. Вывод - иногда тупой лобовой путь не самый кривой) Буду доводить прочие режимы программы и попутно избавляться от грехов "архитектуры". Теперь это проще - когда можно всегда откатить на хоть и страшную на вид, но работоспособную версию.

Добавлено через 6 минут
Кстати, пока делал этот лобовой перевод, используя нехитрые возможности VS, например, по замене каких-то символов на другие (например - круглые скобки массивов в фортране на квадратные c#), поймал себя на мысли, что не так уж трудно это автоматизировать полностью. Но не уверен, что это сейчас будет очень востребовано.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.12.2017, 22:38

Можно ли во время выполнения "извлечь" имя приложения, имя класса, имя исполняемого метода и пр. ?
или какие-нубдь "квазипеременные" компилятора, позволяющие их использовать?

Получить имя метода внутри самого метода
function myFunc() { console.log(arguments.callee.name); } myFunc(); Выводит всё как надо - myFunc. function MyClass(name)...

Ошибка: "Тип фактического параметра должен быть идентичен типу формального параметра-переменной"
Срочно! Ошибка На 21 строке головной программы выдает ошибку "Тип фактического параметра должен быть идентичен типу формального...

Как внутри события получить имя объекта
Доброго времени суток, всем. Все наверное в курсе - когда интерфейс к программе пишешь, постоянно приходится один и тот же кусок...

Как из IP адреса получить имя компа (см. внутри) (Помогите!)
У нас стоит IIS и он настоен на встроенную проверку подлинности Windows. Вот такой код (strIPHost=Request.ServerVariables('REMOTE_HOST'))...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru