public virtual object Clone()
        {
            ListWithOnChanged <T> clone = new ListWithOnChanged <T>();

            T[] arr = this.ToArray();
            clone.AddRange(arr);
            return(clone);
        }
 /// <summary>
 /// Inisialsisasi variabel
 /// </summary>
 /// <param name="name">nama variabel</param>
 /// <param name="description">deskripsi variabel</param>
 private void initialize(string name, string description)
 {
     this.variableName        = name;
     this.variableDescription = description;
     seriesValues             = new ListWithOnChanged <double>();
     isValueChanged           = false;
     sumValue = 0;
     this.seriesValues.Changed += new ChangedEventHandler(SeriesValues_Changed);
 }
        public virtual IList <T> AsReadOnly()
        {
            if (this.IsReadOnly)
            {
                throw new ListReadOnlyException();
            }
            ListWithOnChanged <T> el = new ListWithOnChanged <T>(this.Inner);

            el.IsReadOnly = true;
            return(el);
        }
        /// <summary>
        /// Fungsi untuk membuat variabel waktu
        /// </summary>
        private void createNewTimeData()
        {
            DateTime currentDate = new DateTime(startDate.Year, startDate.Month, startDate.Day);

            this.time  = new ListWithOnChanged <string>();
            this.xTime = new ListWithOnChanged <DateTime>();

            switch (this.frequency)
            {
            case SeriesFrequency.Annual:
                while (currentDate <= this.endDate)
                {
                    this.time.Add(currentDate.Year.ToString());
                    this.xTime.Add(currentDate);
                    currentDate = currentDate.AddYears(1);
                }
                break;

            case SeriesFrequency.SemiAnnual:
                while (currentDate <= this.endDate)
                {
                    this.time.Add("Half " + (currentDate.Month / 6) + " " +
                                  currentDate.Year.ToString());
                    this.xTime.Add(currentDate);
                    currentDate = currentDate.AddMonths(6);
                }
                break;

            case SeriesFrequency.Quarterly:
                while (currentDate <= this.endDate)
                {
                    this.time.Add("Quarter " + (currentDate.Month / 3) + " " +
                                  currentDate.Year.ToString());
                    this.xTime.Add(currentDate);
                    currentDate = currentDate.AddMonths(3);
                }
                break;

            case SeriesFrequency.Monthly:
                while (currentDate <= this.endDate)
                {
                    this.time.Add(SeriesData.ConvertIntToMonth(currentDate.Month)
                                  + " " + currentDate.Year.ToString());
                    this.xTime.Add(currentDate);
                    currentDate = currentDate.AddMonths(1);
                }
                break;

            case SeriesFrequency.Weekly:
                while (currentDate <= this.endDate)
                {
                    this.time.Add(currentDate.ToString("dd/MM/yy"));
                    this.xTime.Add(currentDate);
                    currentDate = currentDate.AddDays(7);
                }
                break;

            case SeriesFrequency.Daily:
                while (currentDate <= this.endDate)
                {
                    this.time.Add(currentDate.ToString("dd/MM/yy"));
                    this.xTime.Add(currentDate);
                    currentDate = currentDate.AddDays(1);
                }
                break;

            case SeriesFrequency.Daily6:
                while (currentDate <= this.endDate)
                {
                    if (currentDate.DayOfWeek != DayOfWeek.Sunday)
                    {
                        this.time.Add(currentDate.ToString("dd/MM/yy"));
                        this.xTime.Add(currentDate);
                    }
                    currentDate = currentDate.AddDays(1);
                }
                break;

            case SeriesFrequency.Daily5:
                while (currentDate <= this.endDate)
                {
                    if (currentDate.DayOfWeek != DayOfWeek.Sunday &&
                        currentDate.DayOfWeek != DayOfWeek.Saturday)
                    {
                        this.time.Add(currentDate.ToString("dd/MM/yy"));
                        this.xTime.Add(currentDate);
                    }
                    currentDate = currentDate.AddDays(1);
                }
                break;

            case SeriesFrequency.Undated:
                for (int i = 0; i < this.numberObservations; i++)
                {
                    this.time.Add(Convert.ToString(i + 1));
                }
                break;
            }
        }