Заполнение конструктора циклом

Я имею дело с объектом с 7 параметрами, и все эти 7 параметров представляют день недели. Если день понедельник, то оставшиеся 6 дней в конструкторе предполагается заполнить нулем.

Я начинаю с создания объекта и заполняю все 7 параметров в конструкторе нулевым значением, но мой вопрос: как мне создать цикл, который заполняет правильное количество дней? Проблема не в том, чтобы получить текущий день или использовать сеттеры, но я не могу взломать код того, как использовать цикл таким образом.

Week week = new Week(null, null, null, null, null, null, null);

for (int i=0; i<7; i++) {
    week(set first parameter, then second, then third etc)..
}

Любая помощь приветствуется!

Можно ли изменить код Week? Похоже, что лучше будет конструктор, может быть, тот, который принимает только объект System.DayOfWeek ...

AKX 06.08.2018 10:10

Перечисление DateTime.DayOfWeek должно быть вашим лучшим выбором. Вы можете использовать значения из перечисления для определения каждого аргумента конструктора при создании экземпляра Week.

Tetsuya Yamamoto 06.08.2018 10:11

какой странный классный дизайн ..

quetzalcoatl 06.08.2018 10:12

На самом деле это просто мысленный пример моего проекта для упрощения. Мои параметры состоят из объектов толщины, но я подумал, что это не актуально. Мне просто нужно выяснить, как получить доступ к параметру по номеру некоторого сомрта (например, параметр доступа [7] .. для цикла

Gustavbang 06.08.2018 10:12

это называется индексацией и в простейшей форме может использовать System.Array

Cee McSharpface 06.08.2018 10:13

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

Gustavbang 06.08.2018 10:14

вы не можете заполнить конструктор циклом, однако, если параметры доступны как свойства, вы можете использовать отражение, чтобы установить их значения в цикле

Ashkan Mobayen Khiabani 06.08.2018 10:14

Я вообще не понимаю этот дизайн. "и все эти 7 параметров представляют день недели. Если день понедельник" Если у вас семь дней, что такое "день"? Кроме того, зачем создавать экземпляры за неделю? Разве неделя не статична, когда дни всегда одни и те же? Я не понимаю, зачем вообще нужно было создавать Week(Monday, Monday, Monday, Monday, Monday), а затем в программе Week(Sunday, Sunday, Sunday, Sunday).

HimBromBeere 06.08.2018 10:16

@AshkanMobayenKhiabani интересно! Спасибо за ответ

Gustavbang 06.08.2018 10:19

@HimBromBeere Это пример мысли, извините за то, что не пояснил. Упражнение состоит в том, чтобы заполнить конструктор с помощью цикла. Проект, над которым я работаю, слишком сложен, чтобы даже начинать его разработку.

Gustavbang 06.08.2018 10:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
10
225
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете преобразовать день недели в целое число, как это, и реализовать свою логику ..

int day = (int)DateTime.Now.DayOfWeek;

Помните Первый день недели: воскресенье (нулевое значение). Вы можете справиться с этим и установить для него значение 7 ..

int day = ((int)DateTime.Now.DayOfWeek == 0) ? 7 : (int)DateTime.Now.DayOfWeek;

Ах, это могло быть так. Правильно ли я понимаю это, если печатаю? я могу выяснить, является ли он нулевым, а затем установить другое значение?

Gustavbang 06.08.2018 10:16

Вы можете сравнить день int с циклом var in for, чтобы определить день

Muhammad Saqlain 06.08.2018 10:16

Похоже на сломанный дизайн. Зачем вообще нужно создавать экземпляр Week? Я не могу представить себе какой-либо вариант использования, чтобы сделать такую ​​вещь, поскольку Week кажется мне довольно статичной вещью.

В любом случае, чтобы ответить на ваш вопрос о конструкторе, невозможно заполнить параметры метода или конструктора один за другим, вы должны установить все сразу.

Конечно, вы можете установить свойства своего класса одно за другим:

Week w = new Week();
var props = typeof(Week).GetProperties();
for(int i = 0; i < 7; i++)
{
    // set properties, e.g. using reflection:
    props[i].SetValue(w, myValue);
}
Ответ принят как подходящий

Из-за ваших комментариев я подумал: Вам следует рассмотреть возможность использования дополнительных параметров, где вы можете установить значение по умолчанию для параметра, который может быть нулевым.

Псевдокод:

public week(object param1 = null, object param2 = null, object param3 = null)
{
    //Do Stuff here
}

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

Вы найдете дополнительную информацию о необязательных параметрах здесь.

В итоге я заполнил пустые места циклом for, но это тоже отличное решение!

Gustavbang 06.08.2018 12:26

Другие вопросы по теме