Как Вы выполняете итерации в течение каждого дня года?

Не используйте какое-либо ключевое слово или аргумент в качестве ввода или скобки для вашей функции. Это очень простое решение:)

35
задан Chris Conway 10 February 2009 в 19:20
поделиться

7 ответов

Я использовал бы цикл, который похож на это

for(DateTime date = begin; date <= end; date = date.AddDays(1))
{
}

, Набор начинается и заканчивается соответственно

78
ответ дан TK. 10 October 2019 в 11:28
поделиться
DateTime dateTime = new DateTime(2009, 1, 1);    

while(dateTime.Year < 2010)
    {

      dateTime = dateTime.AddDays(1);
    }
6
ответ дан kemiller2002 10 October 2019 в 11:28
поделиться

Я использовал бы MiscUtil и его дополнительные методы:

foreach(DateTime date in 1.January(2009)
                         .To(31.December(2009))
                         .Step(1.Days())
{
    Console.WriteLine(date);
}
5
ответ дан Jon Skeet 10 October 2019 в 11:28
поделиться

Установите две переменные:

DateTime lowValue = DateTime.Parse("1/1/2009");
DateTime highValue = DateTime.Parse("12/31/2009");

Затем добавьте день к низкой стоимости, пока это не будет равно highvalue:

while (lowValue <= highValue)
{
   //Do stuff here
   lowValue = lowValue.AddDays(1);
}

Или что-то как этот.

3
ответ дан John Sheehan 10 October 2019 в 11:28
поделиться

int day; for (int i = 1; i<365;i++) { day++; }

Извините, не мог сопротивляться.

1
ответ дан Robert S. 10 October 2019 в 11:28
поделиться
DateTime current = DateTime.Parse("1/1/2009");
DateTime nextYear = current.AddYears(1);
do
{
    Console.WriteLine(current);
    current = current.AddDays(1);
} while (current < nextYear) ;
0
ответ дан DMCS 10 October 2019 в 11:28
поделиться

Другая опция, реализовывая шаблон разработки Итератора:

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

Итератора Думает на этом. Предположим, что все работает просто великолепно, и Вы скопировать/вставить повсеместно "для" предложения. И внезапно как часть требований, необходимо выполнить итерации всех дней, но пропустить некоторых из них (как в календаре, пропустите праздники, выходные, пользовательские и т.д.)

, необходимо было бы создать "отрезанное" новое и использовать Календарь вместо этого. Затем ищите и замените весь свой for's.

В ООП, это могло быть достигнуто с помощью шаблона Итератора.

От Wikpedia:

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

, Таким образом, идея состоит в том, чтобы использовать конструкцию как это:

        DateTime fromDate = DateTime.Parse("1/1/2009");
        DateTime toDate   = DateTime.Parse("12/31/2009");

        // Create an instance of the collection class
        DateTimeEnumerator dateTimeRange = 
                              new DateTimeEnumerator( fromDate, toDate );


        // Iterate with foreach
        foreach (DateTime day in dateTimeRange )
        {
            System.Console.Write(day + " ");
        }

И затем в случае необходимости Вы могли создать подклассы для реализации различных алгоритмов, тот, который использует AddDay (1), другой, который использует AddDay (7) или другой что простой Календарь использования вместо этого. И т.д. и т.д.

идея состоит в том, чтобы понизить связь между объектами.

Снова, это было бы излишеством для большинства случаев, но если повторение формируется релевантный часть системы (скажем, Вы создаете некоторый безотносительно уведомления, для предприятия, и должны придерживаться различной глобализации

, базовое внедрение, конечно, использовало бы для.

public class DateTimeEnumerator : System.Collections.IEnumerable
{
    private DateTime begin;
    private DateTime end;

    public DateTimeEnumerator ( DateTime begin , DateTime end ) 
    {
        // probably create a defensive copy here... 
        this.begin = begin;
        this.end = end;
    }
    public System.Collections.IEnumerator GetEnumerator()
    {
        for(DateTime date = begin; date < end; date = date.AddDays(1))
        {
            yield return date;
        }
    }
}

Просто идея :)

20
ответ дан OscarRyz 10 October 2019 в 11:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: