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

Динамический массив вместо свойств

07.08.2013, 18:37. Показов 4078. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть некая структура с множеством данных

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public struct man
    {
        private string sex;
 
        public string Name { get; set; }
        public string Surname{ get; set; }
        public int Age { get; set; }
        public string Sex
        {
            get { return sex; }
            set
            {
                if (value == "male" || value == "female")
                    sex= value;
            }
..............................................................
        }
}
Подскажите как вместо отдельных свойств использовать список и что бы на данные также можно было делать запреты? (т.е. пол может быть только мужским или женским, возраст не может быть больше 100 лет и т.д.)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.08.2013, 18:37
Ответы с готовыми решениями:

Динамический список свойств
Здравствуйте. Возникла необходимость использовать изменяемый набор записей. При запуске программа считывает ключи и значения с этого файла...

Целесообразность использования свойств вместо public полей в приложениях, где важна скорость
Visual Studio в том коде, который я пишу для решения одной числодробильной задачи, упорно подсказывал мне о необходимости заменять поля...

Динамический массив вместо вектора
Добрый день. Мною ( не только ) была осуществлена программа, считающая значения функции y = f(x), и выводящая их в формате...

44
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
07.08.2013, 18:58
Цитата Сообщение от polsok Посмотреть сообщение
Подскажите как вместо отдельных свойств использовать список
Зачем вам это?
0
MЫW
 Аватар для phantom96
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
07.08.2013, 20:04
А чем вас это
C#
1
2
3
4
5
            set
            {
                if (value == "male" || value == "female")
                    sex= value;
            }
не устраивает? Максимум что можно сделать это sex не string, а enum.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.08.2013, 21:11
боюсь представить объект Man со свойством Sex == female
1
7 / 6 / 6
Регистрация: 20.03.2011
Сообщений: 350
07.08.2013, 21:40  [ТС]
Цитата Сообщение от turbanoff Посмотреть сообщение
Зачем вам это?
данные будут приходить из разных источников, текстовые файлы, XML, SQL, набраны в форме... и везде будут выглядеть примерно вот так Name:Ivanov, Sex:Male.
Для разделения данных по свойствам я использую свич. А если бы я реализовал это списком мог бы просто через Foreach... И хранил бы типы свойств в одном месте, а не в каждом варианте потока.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.08.2013, 21:50
polsok, вы все перепутали, вот и все
0
7 / 6 / 6
Регистрация: 20.03.2011
Сообщений: 350
07.08.2013, 22:45  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
polsok, вы все перепутали, вот и все
поясни
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.08.2013, 23:17
polsok, какой отношение массив объектов имеет к самому объекту? Sex - это Enum, либо, в худшем случае, булевсий флаг - IsMale.
0
7 / 6 / 6
Регистрация: 20.03.2011
Сообщений: 350
07.08.2013, 23:50  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
polsok, какой отношение массив объектов имеет к самому объекту? Sex - это Enum, либо, в худшем случае, булевсий флаг - IsMale.
Есть структура и у нее есть свойства (десятки - сотни свойств) с разными типами и ограничениями.
Объект этой структуры объединяется в динамический массив.
А данные для объектов берутся из разных источников, текстовые файлы, XML, SQL, набраны в форме...(Для простоты пускай будет один поток)
Выглядят данные в форме например так Name:Ivanov, Sex:Male где первая часть имя свойства, вторая часть - его тело.
Для того что бы добавить в объект еще одно свойство мне придется во первых добавить его в структуру, а во вторых ввести его в свич, который будет искать этот элемент в потоке. А я хочу что бы данные о свойствах были в одном месте.
Если бы все свойства не несли ограничений, то я бы не парился - создал бы список вместо свойств и при разборе потока просто бы перебирал коллекцию свойств. Но у каждого из свойств есть ограничения.
Как же быть?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.08.2013, 00:10
polsok, в нормальной архитектуре
а) у объектов не может быть 100 полей
б) не бывает свитчей кроме как у фабрики объектов.
0
7 / 6 / 6
Регистрация: 20.03.2011
Сообщений: 350
08.08.2013, 00:16  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
polsok, какой отношение массив объектов имеет к самому объекту? Sex - это Enum, либо, в худшем случае, булевсий флаг - IsMale.
В продолжение...

Появилась мысль создать еще один класс, который будет создавать универсальное свойство и будет давать возможность на ограничения. А в структуре просто объявлять свойства как экземпляры класса свойств и добавлять их в список. Тогда я обойду ограничения. Но как реализовать надо подумать
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.08.2013, 00:17
polsok, подумать это да, проблема. Но при наличии определенных частей тела эта проблема решается со временем.
1
7 / 6 / 6
Регистрация: 20.03.2011
Сообщений: 350
08.08.2013, 00:20  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
polsok, в нормальной архитектуре
а) у объектов не может быть 100 полей
б) не бывает свитчей кроме как у фабрики объектов.
Вот такая вот портянка

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
StreamReader reader = new StreamReader(ofg.FileName, Encoding.GetEncoding(1251));
while (true)
            {
                string s = reader.ReadLine();
                if (s == null)
                    break;
else
                {
                    {
                        case "Name":
                            Man_Element.Name = temp;
                            break;
                        case "Surname":
                            Man_Element.Surname = temp;
                            break;
                        case "Age":
                            Man_Element.Age= temp;
                            break;
                        case "Sex":
                            Man_Element.Sex = temp;
                            break;
                       ..............................................................
 
                        default:
                            break;
                    }
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.08.2013, 00:24
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
using System;
 
namespace HeaderTest
{
    class MyClass
    {
        public int X, Y, Z;
    }
    class Program
    {
        static void Main()
        {
            var my = new MyClass();
            SetValue(my, "X", 10);
            SetValue(my, "Y", 20);
            SetValue(my, "Z", 150);
            Console.WriteLine("X = {0}, Y = {1}, Z = {2}", my.X, my.Y, my.Z);
        }
 
        private static void SetValue(object obj, string param, object value)
        {
            var field = obj.GetType().GetField(param);
            if (field == null)
                throw new ArgumentException("Invalid param name", "param");
            field.SetValue(obj, value);
        }
    }
}
1
MЫW
 Аватар для phantom96
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
08.08.2013, 00:42
Psilon, тут всё куда извращённее чем нам кажется. Человек хочет класс с неизвестным заранее набором свойств.
polsok, вместо "struct Man" используйте Dictionary.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.08.2013, 00:46
phantom96, если набор свойств неизвестен, то switch case не поможет, а он явно используется, мм?..
0
MЫW
 Аватар для phantom96
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
08.08.2013, 00:47
Цитата Сообщение от Psilon Посмотреть сообщение
phantom96, если набор свойств неизвестен, то switch case не поможет, а он явно используется, мм?..
Так он же сам написал, что хочет foreach'ем пользоваться. Вот пусть и перебирает каждое свойство.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.08.2013, 00:48
phantom96, и? И какой критерий остановки? Свойство №100500? оканчивается на 'k'? В любом случай какой-то критерий будет. Не имея критерия выборки поля (название, like '%SUR%', рандом и пр) принципиально невозможно записать в него ничего.
0
MЫW
 Аватар для phantom96
124 / 109 / 9
Регистрация: 15.02.2013
Сообщений: 538
08.08.2013, 00:58
Подскажите как вместо отдельных свойств использовать список
Dictionary вполне подходит. Ключами делать названия свойств из файла, значениями !!!значения. Для доступа либо искать конкретное либо просто перебрать все. Какой критерий остановки должен быть в foreach?
Для каждого Men'а просто создаём новый словарь и при считывании файла сразу заполняем. Тут же и проверку проводить можно.
Человек вполне конкретное условие поставил, пусть сделает как хочет, говорить сразу как лучше тоже не совсем правильно.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
08.08.2013, 01:00
phantom96, если есть имя свйоства и значения - мы можем его использовать. Уж определись, есть у нас название и значение поля или нет. Судя по приведенному выше коду со switch case у нас есть и то и то. СЛедовательно, легко применяем мои 5 строчек метода для присвоения любого допустимого значения любому полю.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.08.2013, 01:00
Помогаю со студенческими работами здесь

Вместо вывода в stdout, сохранить числа в динамический массив
Это алгоритм выборки элементов из двумерного массива. Нужно сохранить отобранные элементы в одномерный динамически создаваемый массив. ...

Один большой динамический массив вместо нескольких меньшего размера
Уважаемые форумчане, Прошу помочь советом. Интересует ответы на вопросы: Возможно ли? Если да, то как реализовать? ...

Динамический массив при наследовании, элементами которого являются объекты класса наследника динамический массив
Попробовал создать динамический массив, у которого элементы - объекты класса динамический массив, причем использовал класс-наследник от...

Сделать динамический массив структур, причем в структуре так же существует динамический массив
Добрый день. Есть такая пзадача: нужно сделать динамический массив структур, причем в структуре так же существует динамический массив....

Динамический массив ,элементами которого являются объекты класса динамический массив
Доброго времени суток, захотел создать динамический массив ,элементами которого являются объекты класса динамический массив, если...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru