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

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

07.08.2013, 18:37. Показов 4295. Ответов 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
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
13.08.2013, 11:47
Студворк — интернет-сервис помощи студентам
Вот не знаю... я на работе столкнулся с проектом, где все данные представлены в виде DataTable. То есть заполнение из БД, XML - не вопрос. Для файлов и потоков естественно приходится писать новые методы. Все проверки идут на уровне DataRow, описываются один раз. Теоретически, в DataTable возможно закинуть таблицу и с "лишними" полями.
0
7 / 6 / 6
Регистрация: 20.03.2011
Сообщений: 350
13.08.2013, 14:55  [ТС]
Цитата Сообщение от Graf_Nosferatu Посмотреть сообщение
Он он же откуда-то знает, что определённые свойства должны принимать определённые значения.

Добавлено через 2 минуты
И поэтому я просил уточнить задание.
Еще раз поясню, что хочу получить:
есть динамический массив(people) элементов(man). У каждого элемента Man есть свои свойства: имя, фамилия, возраст... Также у элемента Man еще есть такое свойство как дети (которое само по себе представляет список детей). Вот собственно этот массив People и надо заполнить. Вот весь код программы.

1 Это я взял у тебя:
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
38
39
40
41
42
43
44
45
46
47
48
49
public class Man
    {
        // проверки выполняемые при добавлении/изменении значений
        private static Dictionary<string, Func<object, bool>> checkers;
 
        // сами значения
        private Dictionary<string, object> values;
 
        static Man()
        {
            checkers = new Dictionary<string, Func<object, bool>>();
            // проверка, что значение свойства [Sex] будет либо "male" либо "female"
            checkers.Add("Sex", sex => sex.ToString() == "male" || sex.ToString() == "female");
            // проверка, что значение свойства [Age] будет меньше 100 и больше 0
            checkers.Add("Age", age => (int)age < 100 && (int)age > 0);
        }
 
        public Man()
        {
            values = new Dictionary<string, object>();
        }
 
        public object this[string propertyName]
        {
            get
            {
                return values[propertyName];
            }
            set
            {
                // если для указанного свойства есть проверка
                if (checkers.ContainsKey(propertyName))
                {
                    // выполняем её
                    if (checkers[propertyName](values))
                    {
                        // и если она выполняется присваиваем или добавляем значение
                        values[propertyName] = value;
                    }
                }
                // если проверки нет
                else
                {
                    // сразу присваиваем или добавляем значение
                    values[propertyName] = value;
                }
            }
        }
    }
2 это код реализации класса
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
static void Main(string[] args)
        {
 
            List<Man> People = new List<Man>();
            Man man = new Man();
            StreamReader reader = new StreamReader("input.txt", Encoding.GetEncoding(1251));
            while (true)
            {
                string s = reader.ReadLine();
                if (s == null)
                    break;
                if (s == "&&")
                {
                    man = new Man();
                    People.Add(man);
                    continue;
                }
                string[] temp = s.Split(new Char[] { '=' });
                 man[temp[0]] = temp[1];
            }
        }
ну и сам файл во вложении
И так какие проблемы возникают:
1
C#
1
checkers.Add("Sex", sex => sex.ToString() == "male" || sex.ToString() == "female");
Не воспринимает правильные значения, ругается и на male и на female

2 ну никак не получается добавить новую строку в словарь man
C#
1
man[temp[0]] = temp[1];
, т.е. не получается заполнить массив.

3 Psilon, конечно дает хорошие идеи, но честно не понимаю как его идею можно реализовать в этом проекте.
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Роберт Шекли. «Верный вопрос»
Вложения
Тип файла: txt Input.txt (352 байт, 6 просмотров)
0
34 / 41 / 5
Регистрация: 07.09.2011
Сообщений: 108
14.08.2013, 08:53
А почему решил отказаться от обычного класса с жёстко указанными свойствами?
И как должно трактоваться отсутствие значений в файле?
1
7 / 6 / 6
Регистрация: 20.03.2011
Сообщений: 350
14.08.2013, 11:49  [ТС]
Цитата Сообщение от Graf_Nosferatu Посмотреть сообщение
А почему решил отказаться от обычного класса с жёстко указанными свойствами?
И как должно трактоваться отсутствие значений в файле?
У меня изначально так и было. Посмотри начало темы. Проблема в том что если я использую свойства, в потоке ввода надо дополнительно вести просмотр значений по именам свойств. И эти имена соответственно приходится дублировать.
0
34 / 41 / 5
Регистрация: 07.09.2011
Сообщений: 108
14.08.2013, 12:42
Просто проблема вот в чём: входные данные у тебя хранятся в виде строк, а свойства могут быть разных типов данных. Есть тебе нужно просто выводить данные на форму и ничего больше, можно было бы всё хранить в виде строк, а если ещё и обработка какая-то нужно, то тут всё сложнее. И ещё вопрос в каком виде данные хранятся в SQL базе? Тоже всё в строковом виде или же в специфичных для свойства типах данных? У меня есть одна идея, но надо все тонкости учесть, чтобы не случилось так, что для файлов она подойдёт, а для SQL базы нет.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.08.2013, 12:42

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
45
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru