Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2011, 19:37   #1
Pampilius
Новичок
Джуниор
 
Регистрация: 26.08.2011
Сообщений: 3
Печаль ArgumentOutOfRangeException при операции с Timespan

Проблема заключается в том, что при запуске теста выдаётся ошибка в том месте где её по моим пониманиям нет. вот код:
Код:
private int daysInthePast = 26*7;
private int daysIntheFuture = 52*7;

public void initDays()
        {
            int date;
            TimeSpan ts;
            
            //init Array with past days
            for(int i=0; i < daysInthePast; i++)
            {
                try
                {                    
                        //dayspast.date = (now-(daysinthepast-i)).date
                        date = daysInthePast - i;
                        ts = new TimeSpan(date, 0, 0, 0, 0);                        
                        DaysPast[i] = new Day(now.Subtract(ts));                       
                }
                catch (ArgumentOutOfRangeException e)
                {MessageBox.Show(e.ToString()); 
                }
            }
            //init Array with days today and in the future
            for (int j = 0; j < daysIntheFuture; j++)
            {
                try
                {
                    date = j;
                    ts = new TimeSpan(date, 0, 0, 0, 0);
                    DaysFuture[j] = new Day(now.Add(ts));
                }
                catch (ArgumentOutOfRangeException e)
                { MessageBox.Show(e.ToString());
                }
            }
...
при этом now - это просто переменная соответсвующая DateTime.Now
в жирно выделенных частях и выходит ошибка. кто может подсказать в чём проблема?
Pampilius вне форума Ответить с цитированием
Старый 26.08.2011, 20:37   #2
skgwazap
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 40
По умолчанию

Где и как объявлены массивы DaysPast и DaysFuture?
skgwazap вне форума Ответить с цитированием
Старый 26.08.2011, 20:39   #3
Pampilius
Новичок
Джуниор
 
Регистрация: 26.08.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от skgwazap Посмотреть сообщение
Где и как объявлены массивы DaysPast и DaysFuture?
в конструкторе:

Код:
public Calendar()
        {
            DaysPast = new List<Day>();
            DaysFuture = new List<Day>();
            //set limits 
            DaysFuture.Capacity = daysIntheFuture;
            DaysPast.Capacity = daysInthePast;
        }
Pampilius вне форума Ответить с цитированием
Старый 27.08.2011, 11:01   #4
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

А зачем ты выставляешь Capacity?.. К листу просто добавляй. Получиться что-то вроде этого:
Код:
 public class Calendar
    {
        private readonly List<Day> DaysFuture;
        private readonly List<Day> DaysPast;
        private const int daysIntheFuture = 52*7;
        private const int daysInthePast = 26*7;

        public Calendar()
        {
            DaysPast = new List<Day> ();
            DaysFuture = new List<Day> ();
        }

        public void InitDays()
        {
            int date;
            TimeSpan ts;

            //init Array with past days
            for (int i = 0; i < daysInthePast; i++)
            {
                try
                {
                    //dayspast.date = (now-(daysinthepast-i)).date
                    date = daysInthePast - i;
                    ts = new TimeSpan(date, 0, 0, 0, 0);
                    DaysPast.Add( new Day(date.ToString()));
                }
                catch (ArgumentOutOfRangeException e)
                {
                    MessageBox.Show(e.ToString());
                }
            }
            //init Array with days today and in the future
            for (int j = 0; j < daysIntheFuture; j++)
            {
                try
                {
                    date = j;
                    ts = new TimeSpan(date, 0, 0, 0, 0);
                    DaysFuture.Add(new Day(date.ToString()));
                }
                catch (ArgumentOutOfRangeException e)
                {
                    MessageBox.Show(e.ToString());
                }
            }
        }
    }

    public class Day
    {
        private string _name;

        public Day(string name)
        {
            _name = name;
        }
    }
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 27.08.2011, 13:01   #5
Pampilius
Новичок
Джуниор
 
Регистрация: 26.08.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Скарам Посмотреть сообщение
А зачем ты выставляешь Capacity?.. К листу просто добавляй. Получиться что-то вроде этого..
всё было бы круто, но в конструктор класса Day передаётся объект класса Date. И мне кажется именно с этим какие-то проблемы..

когда я от сегодняшней даты отнимаю определённый Timespan, и закидываю это дело в конструктор, выходит этот Exception

:edit: решил проблему. использую DaysPast.Insert(индекс, объект)
спасибо )

Последний раз редактировалось Pampilius; 27.08.2011 в 13:20.
Pampilius вне форума Ответить с цитированием
Старый 27.08.2011, 13:05   #6
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Ошибка у тебя из-за DaysPast[i] = new Day(now.Subtract(ts)); . Я же написал: Добавляй через Add..: DaysPast.Add( new Day(now.Subtract(ts)));
Не давай организму поблажки, каждый день тренируй его в шашки..

Последний раз редактировалось Скарам; 27.08.2011 в 13:08.
Скарам вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ Операции с циклами Pascaler Помощь студентам 4 03.12.2010 20:37
Поразрядные операции Максикок Помощь студентам 1 18.11.2010 20:23
побитовые операции Dimarik Общие вопросы C/C++ 7 16.04.2010 19:27
Операции с формой Shouldercannon Общие вопросы Delphi 1 06.11.2008 14:53
Поразрядные операции eds Общие вопросы C/C++ 1 30.10.2008 10:29