Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/40: Рейтинг темы: голосов - 40, средняя оценка - 4.50
Си-решеточник
 Аватар для Rameron
141 / 135 / 60
Регистрация: 07.02.2011
Сообщений: 669

Передача структур и их параметров методу

13.06.2014, 12:24. Показов 8193. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.

Вот какая у меня возникла задача:
Есть несколько структур. У каждой структуры есть n-ное количество параметров. Нужно создать такой метод, которому можно передать как параметр любую с этих структур и параметр, который нужно поменять (значение, на которое нужно параметр менять, будет найдено в самом методе исходя из названия параметра).

Мысли меня привели к такой реализации: создаем класс с параметрами
structRef - Ссылка на структуру (тип object)
structType - Название структуры (тип String)
parName - Название параметра (тип String)

И вот надо структуру structRef привести к типу, записанному в structType и в полученной структуре установить параметру с названием parName некоторое значение.

Не знаю, насколько бредовая такая реализация, но таким образом можно будет метод, который занимает около 200 строк уменьшить в разы.

P.S. Если подобное слишком сложно в реализации, то поменяю структуры на классы и благодаря наследованию эта проблема решится. Но это в крайнем случае.

Заранее спасибо все, кто откликнется.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.06.2014, 12:24
Ответы с готовыми решениями:

Странности при передаче параметров методу (ref out )
Столкнулся с такой вот непонятной ситуацией. Вызываю метод таким вот способом без параметров ref или out. ...

Передача объектов методу
Объясните, пожалуйста почему не компилируется код? using System; class Test { int a; Test(int i){ a = i; }

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

4
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
13.06.2014, 12:30
покажи структуры , и по каким критериям выбирается член структуры, который нужно изменить. возможно есть другое решение
0
Си-решеточник
 Аватар для Rameron
141 / 135 / 60
Регистрация: 07.02.2011
Сообщений: 669
13.06.2014, 12:34  [ТС]
Поправка: передавать название структуры не обязательно, так как тип можно узнать с помощью GetType().

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

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public struct MainMenu
    {
        public int ItemsCount;
        public MenuItem[] menuItems;
    }
    
    public struct MenuItem
    {
        public String NameID;
        public String Action;
        public String Image;
        public String HighImage;
        public int ItemsCount;
        public SubMenuItem[] SubMenus;
    }
 
    public struct SubMenuItem
    {
        public String NameID;
        public String Action;
        public String Icon;
        public String HighIcon;
        public String String;
        public int ItemsCount;
        public SubSubMenuItem[] SubSubMenus;
    }
 
    public struct SubSubMenuItem
    {
        public String NameID;
        public String ActionOver;
        public String ActionLeave;
        public String Icon;
        public String HighIcon;
        public String String;
        public String Action;
    }
Добавлено через 54 секунды
Член структуры передается методу, его не нужно выбирать самой программе.
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
13.06.2014, 12:34
блин .ну тут наследование прям так и напрашивается
0
Си-решеточник
 Аватар для Rameron
141 / 135 / 60
Регистрация: 07.02.2011
Сообщений: 669
13.06.2014, 13:12  [ТС]
Цитата Сообщение от Metall_Version Посмотреть сообщение
ну тут наследование прям так и напрашивается
Да знаю я... Но тут получается не последовательное наследования. Допустим - я буду принимать методом как параметр родительский класс, от которого наследованы все структуры. Так я могу передать методу любую с этих структур. Однако... Если некого параметра нет в родительском классе, то как мне объяснить методу, что переданный ей параметр не родительский класс, а на самом деле наследник? И как заставить метод поменять определенный член этого класса на другое значение?

Добавлено через 29 минут
Вроде бы написал метод, который должен выполнять вышеуказанную задачу, но значение поля не меняется и ошибок при этом никаких нет... Мистика.

C#
1
2
3
4
5
6
7
8
        private void SetValue(ref object o, String parName, String value)
        {
            Type type = o.GetType();
            FieldInfo[] Members = type.GetFields();
 
            FieldInfo f = Members.Where<FieldInfo>(x => x.Name == parName).ElementAt(0);
            f.SetValue(o, value); 
        }
Добавлено через 1 минуту
А, все, разобрался, метод работает, это я затупил. Всем спасибо за моральную поддержку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.06.2014, 13:12
Помогаю со студенческими работами здесь

Передача массива методу по значению
Можно ли передать массив в метод по значению? (то есть, чтобы в методе можно было изменять элементы массива, но за пределами метода этот...

Передача нескольких массивов методу
Подскажите пожста можно ли в C# передавать больше одного массива методу. Просто у меня передается 4 массива и компилятор ругается что...

ООП. Передача объектов методу по ссылке
Исходный код программы: using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

Передача массивов в качестве аргументов методу
Здравствуйте. В чем разница перед обычной передачей массива и используя модификатор params? Ведь одно и то же вроде бы, ошибок нет?

Передача методу объекта в качестве параметра
Уважаемые знатоки, как понимать Передача методу объекта в качестве параметра?? То есть передаются только лишь поля класса того объекта?...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru