Use generic lists in MonthCalendar (#3483)

This commit is contained in:
gpetrou 2020-06-24 08:45:38 +01:00 коммит произвёл GitHub
Родитель ec7d566c9e
Коммит 6e1ad8c25c
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 135 добавлений и 71 удалений

Просмотреть файл

@ -4,7 +4,7 @@
#nullable disable
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
@ -129,9 +129,9 @@ namespace System.Windows.Forms
/// Lists are slow, so this section can be optimized.
/// Implementation is such that inserts are fast, removals are slow.
/// </summary>
private readonly ArrayList _arrayOfDates = new ArrayList();
private readonly ArrayList _annualArrayOfDates = new ArrayList();
private readonly ArrayList _monthlyArrayOfDates = new ArrayList();
private readonly List<DateTime> _arrayOfDates = new List<DateTime>();
private readonly List<DateTime> _annualArrayOfDates = new List<DateTime>();
private readonly List<DateTime> _monthlyArrayOfDates = new List<DateTime>();
private DateRangeEventHandler _onDateChanged;
private DateRangeEventHandler _onDateSelected;
@ -178,16 +178,8 @@ namespace System.Windows.Forms
[SRDescription(nameof(SR.MonthCalendarAnnuallyBoldedDatesDescr))]
public DateTime[] AnnuallyBoldedDates
{
get
{
DateTime[] dateTimes = new DateTime[_annualArrayOfDates.Count];
for (int i = 0; i < _annualArrayOfDates.Count; ++i)
{
dateTimes[i] = (DateTime)_annualArrayOfDates[i];
}
get => _annualArrayOfDates.ToArray();
return dateTimes;
}
set
{
_annualArrayOfDates.Clear();
@ -198,15 +190,11 @@ namespace System.Windows.Forms
if (value != null && value.Length > 0)
{
// Add each bolded date to our ArrayList.
for (int i = 0; i < value.Length; i++)
// Add each bolded date to our List.
foreach (var dateTime in value)
{
_annualArrayOfDates.Add(value[i]);
}
for (int i = 0; i < value.Length; ++i)
{
_monthsOfYear[value[i].Month - 1] |= 0x00000001 << (value[i].Day - 1);
_annualArrayOfDates.Add(dateTime);
_monthsOfYear[dateTime.Month - 1] |= 0x00000001 << (dateTime.Day - 1);
}
}
@ -268,25 +256,17 @@ namespace System.Windows.Forms
[Localizable(true)]
public DateTime[] BoldedDates
{
get
{
DateTime[] dateTimes = new DateTime[_arrayOfDates.Count];
for (int i = 0; i < _arrayOfDates.Count; ++i)
{
dateTimes[i] = (DateTime)_arrayOfDates[i];
}
get => _arrayOfDates.ToArray();
return dateTimes;
}
set
{
_arrayOfDates.Clear();
if (value != null && value.Length > 0)
{
// Add each bolded date to our ArrayList.
for (int i = 0; i < value.Length; i++)
// Add each bolded date to our List.
foreach (var dateTime in value)
{
_arrayOfDates.Add(value[i]);
_arrayOfDates.Add(dateTime);
}
}
@ -536,16 +516,8 @@ namespace System.Windows.Forms
[SRDescription(nameof(SR.MonthCalendarMonthlyBoldedDatesDescr))]
public DateTime[] MonthlyBoldedDates
{
get
{
DateTime[] dateTimes = new DateTime[_monthlyArrayOfDates.Count];
for (int i = 0; i < _monthlyArrayOfDates.Count; ++i)
{
dateTimes[i] = (DateTime)_monthlyArrayOfDates[i];
}
get => _monthlyArrayOfDates.ToArray();
return dateTimes;
}
set
{
_monthlyArrayOfDates.Clear();
@ -553,15 +525,11 @@ namespace System.Windows.Forms
if (value != null && value.Length > 0)
{
// Add each bolded date to our ArrayList.
for (int i = 0; i < value.Length; i++)
// Add each bolded date to our List.
foreach (var dateTime in value)
{
_monthlyArrayOfDates.Add(value[i]);
}
for (int i = 0; i < value.Length; ++i)
{
_datesToBoldMonthly |= 0x00000001 << (value[i].Day - 1);
_monthlyArrayOfDates.Add(dateTime);
_datesToBoldMonthly |= 0x00000001 << (dateTime.Day - 1);
}
}
@ -1125,7 +1093,7 @@ namespace System.Windows.Forms
int numDates = _arrayOfDates.Count;
for (int i = 0; i < numDates; ++i)
{
DateTime date = (DateTime)_arrayOfDates[i];
DateTime date = _arrayOfDates[i];
if (DateTime.Compare(date, range.Start) >= 0 && DateTime.Compare(date, range.End) <= 0)
{
int month = date.Month;
@ -1560,7 +1528,7 @@ namespace System.Windows.Forms
int i = 0;
for (; i < length; ++i)
{
if (CompareDayAndMonth((DateTime)_annualArrayOfDates[i], date))
if (CompareDayAndMonth(_annualArrayOfDates[i], date))
{
_annualArrayOfDates.RemoveAt(i);
break;
@ -1570,7 +1538,7 @@ namespace System.Windows.Forms
--length;
for (int j = i; j < length; ++j)
{
if (CompareDayAndMonth((DateTime)_annualArrayOfDates[j], date))
if (CompareDayAndMonth(_annualArrayOfDates[j], date))
{
return;
}
@ -1590,7 +1558,7 @@ namespace System.Windows.Forms
int length = _arrayOfDates.Count;
for (int i = 0; i < length; ++i)
{
if (DateTime.Compare(((DateTime)_arrayOfDates[i]).Date, date.Date) == 0)
if (DateTime.Compare(_arrayOfDates[i].Date, date.Date) == 0)
{
_arrayOfDates.RemoveAt(i);
Invalidate();
@ -1612,7 +1580,7 @@ namespace System.Windows.Forms
int i = 0;
for (; i < length; ++i)
{
if (CompareDayAndMonth((DateTime)_monthlyArrayOfDates[i], date))
if (CompareDayAndMonth(_monthlyArrayOfDates[i], date))
{
_monthlyArrayOfDates.RemoveAt(i);
break;
@ -1622,7 +1590,7 @@ namespace System.Windows.Forms
--length;
for (int j = i; j < length; ++j)
{
if (CompareDayAndMonth((DateTime)_monthlyArrayOfDates[j], date))
if (CompareDayAndMonth(_monthlyArrayOfDates[j], date))
{
return;
}

Просмотреть файл

@ -28,14 +28,14 @@ namespace System.Windows.Forms.Tests
Assert.False(control.AllowDrop);
Assert.Equal(AnchorStyles.Top | AnchorStyles.Left, control.Anchor);
Assert.Empty(control.AnnuallyBoldedDates);
Assert.NotSame(control.AnnuallyBoldedDates, control.AnnuallyBoldedDates);
Assert.Same(control.AnnuallyBoldedDates, control.AnnuallyBoldedDates);
Assert.False(control.AutoSize);
Assert.Equal(SystemColors.Window, control.BackColor);
Assert.Null(control.BackgroundImage);
Assert.Equal(ImageLayout.Tile, control.BackgroundImageLayout);
Assert.Null(control.BindingContext);
Assert.Empty(control.BoldedDates);
Assert.NotSame(control.BoldedDates, control.BoldedDates);
Assert.Same(control.BoldedDates, control.BoldedDates);
Assert.True(control.Bottom > 0);
Assert.Equal(0, control.Bounds.X);
Assert.Equal(0, control.Bounds.Y);
@ -101,7 +101,7 @@ namespace System.Windows.Forms.Tests
Assert.Equal(new DateTime(1753, 1, 1), control.MinDate);
Assert.Equal(Size.Empty, control.MinimumSize);
Assert.Empty(control.MonthlyBoldedDates);
Assert.NotSame(control.MonthlyBoldedDates, control.MonthlyBoldedDates);
Assert.Same(control.MonthlyBoldedDates, control.MonthlyBoldedDates);
Assert.Equal(Padding.Empty, control.Padding);
Assert.Null(control.Parent);
Assert.True(control.PreferredSize.Width > 0);
@ -203,14 +203,30 @@ namespace System.Windows.Forms.Tests
};
Assert.Equal(expected, calendar.AnnuallyBoldedDates);
Assert.NotSame(value, calendar.AnnuallyBoldedDates);
Assert.NotSame(calendar.AnnuallyBoldedDates, calendar.AnnuallyBoldedDates);
if (value?.Length > 0)
{
Assert.NotSame(calendar.AnnuallyBoldedDates, calendar.AnnuallyBoldedDates);
}
else
{
Assert.Same(calendar.AnnuallyBoldedDates, calendar.AnnuallyBoldedDates);
}
Assert.False(calendar.IsHandleCreated);
// Set same.
calendar.AnnuallyBoldedDates = value;
Assert.Equal(expected, calendar.AnnuallyBoldedDates);
Assert.NotSame(value, calendar.AnnuallyBoldedDates);
Assert.NotSame(calendar.AnnuallyBoldedDates, calendar.AnnuallyBoldedDates);
if (value?.Length > 0)
{
Assert.NotSame(calendar.AnnuallyBoldedDates, calendar.AnnuallyBoldedDates);
}
else
{
Assert.Same(calendar.AnnuallyBoldedDates, calendar.AnnuallyBoldedDates);
}
Assert.False(calendar.IsHandleCreated);
}
@ -230,7 +246,15 @@ namespace System.Windows.Forms.Tests
calendar.AnnuallyBoldedDates = value;
Assert.Equal(expected, calendar.AnnuallyBoldedDates);
Assert.NotSame(value, calendar.AnnuallyBoldedDates);
Assert.NotSame(calendar.AnnuallyBoldedDates, calendar.AnnuallyBoldedDates);
if (value?.Length > 0)
{
Assert.NotSame(calendar.AnnuallyBoldedDates, calendar.AnnuallyBoldedDates);
}
else
{
Assert.Same(calendar.AnnuallyBoldedDates, calendar.AnnuallyBoldedDates);
}
Assert.True(calendar.IsHandleCreated);
Assert.Equal(0, invalidatedCallCount);
Assert.Equal(0, styleChangedCallCount);
@ -240,7 +264,15 @@ namespace System.Windows.Forms.Tests
calendar.AnnuallyBoldedDates = value;
Assert.Equal(expected, calendar.AnnuallyBoldedDates);
Assert.NotSame(value, calendar.AnnuallyBoldedDates);
Assert.NotSame(calendar.AnnuallyBoldedDates, calendar.AnnuallyBoldedDates);
if (value?.Length > 0)
{
Assert.NotSame(calendar.AnnuallyBoldedDates, calendar.AnnuallyBoldedDates);
}
else
{
Assert.Same(calendar.AnnuallyBoldedDates, calendar.AnnuallyBoldedDates);
}
Assert.True(calendar.IsHandleCreated);
Assert.Equal(0, invalidatedCallCount);
Assert.Equal(0, styleChangedCallCount);
@ -499,14 +531,30 @@ namespace System.Windows.Forms.Tests
};
Assert.Equal(expected, calendar.BoldedDates);
Assert.NotSame(value, calendar.BoldedDates);
Assert.NotSame(calendar.BoldedDates, calendar.BoldedDates);
if (value?.Length > 0)
{
Assert.NotSame(calendar.BoldedDates, calendar.BoldedDates);
}
else
{
Assert.Same(calendar.BoldedDates, calendar.BoldedDates);
}
Assert.False(calendar.IsHandleCreated);
// Set same.
calendar.BoldedDates = value;
Assert.Equal(expected, calendar.BoldedDates);
Assert.NotSame(value, calendar.BoldedDates);
Assert.NotSame(calendar.BoldedDates, calendar.BoldedDates);
if (value?.Length > 0)
{
Assert.NotSame(calendar.BoldedDates, calendar.BoldedDates);
}
else
{
Assert.Same(calendar.BoldedDates, calendar.BoldedDates);
}
Assert.False(calendar.IsHandleCreated);
}
@ -526,7 +574,15 @@ namespace System.Windows.Forms.Tests
calendar.BoldedDates = value;
Assert.Equal(expected, calendar.BoldedDates);
Assert.NotSame(value, calendar.BoldedDates);
Assert.NotSame(calendar.BoldedDates, calendar.BoldedDates);
if (value?.Length > 0)
{
Assert.NotSame(calendar.BoldedDates, calendar.BoldedDates);
}
else
{
Assert.Same(calendar.BoldedDates, calendar.BoldedDates);
}
Assert.True(calendar.IsHandleCreated);
Assert.Equal(0, invalidatedCallCount);
Assert.Equal(0, styleChangedCallCount);
@ -536,7 +592,15 @@ namespace System.Windows.Forms.Tests
calendar.BoldedDates = value;
Assert.Equal(expected, calendar.BoldedDates);
Assert.NotSame(value, calendar.BoldedDates);
Assert.NotSame(calendar.BoldedDates, calendar.BoldedDates);
if (value?.Length > 0)
{
Assert.NotSame(calendar.BoldedDates, calendar.BoldedDates);
}
else
{
Assert.Same(calendar.BoldedDates, calendar.BoldedDates);
}
Assert.True(calendar.IsHandleCreated);
Assert.Equal(0, invalidatedCallCount);
Assert.Equal(0, styleChangedCallCount);
@ -1492,14 +1556,30 @@ namespace System.Windows.Forms.Tests
};
Assert.Equal(expected, calendar.MonthlyBoldedDates);
Assert.NotSame(value, calendar.MonthlyBoldedDates);
Assert.NotSame(calendar.MonthlyBoldedDates, calendar.MonthlyBoldedDates);
if (value?.Length > 0)
{
Assert.NotSame(calendar.MonthlyBoldedDates, calendar.MonthlyBoldedDates);
}
else
{
Assert.Same(calendar.MonthlyBoldedDates, calendar.MonthlyBoldedDates);
}
Assert.False(calendar.IsHandleCreated);
// Set same.
calendar.MonthlyBoldedDates = value;
Assert.Equal(expected, calendar.MonthlyBoldedDates);
Assert.NotSame(value, calendar.MonthlyBoldedDates);
Assert.NotSame(calendar.MonthlyBoldedDates, calendar.MonthlyBoldedDates);
if (value?.Length > 0)
{
Assert.NotSame(calendar.MonthlyBoldedDates, calendar.MonthlyBoldedDates);
}
else
{
Assert.Same(calendar.MonthlyBoldedDates, calendar.MonthlyBoldedDates);
}
Assert.False(calendar.IsHandleCreated);
}
@ -1519,7 +1599,15 @@ namespace System.Windows.Forms.Tests
calendar.MonthlyBoldedDates = value;
Assert.Equal(expected, calendar.MonthlyBoldedDates);
Assert.NotSame(value, calendar.MonthlyBoldedDates);
Assert.NotSame(calendar.MonthlyBoldedDates, calendar.MonthlyBoldedDates);
if (value?.Length > 0)
{
Assert.NotSame(calendar.MonthlyBoldedDates, calendar.MonthlyBoldedDates);
}
else
{
Assert.Same(calendar.MonthlyBoldedDates, calendar.MonthlyBoldedDates);
}
Assert.True(calendar.IsHandleCreated);
Assert.Equal(0, invalidatedCallCount);
Assert.Equal(0, styleChangedCallCount);
@ -1529,7 +1617,15 @@ namespace System.Windows.Forms.Tests
calendar.MonthlyBoldedDates = value;
Assert.Equal(expected, calendar.MonthlyBoldedDates);
Assert.NotSame(value, calendar.MonthlyBoldedDates);
Assert.NotSame(calendar.MonthlyBoldedDates, calendar.MonthlyBoldedDates);
if (value?.Length > 0)
{
Assert.NotSame(calendar.MonthlyBoldedDates, calendar.MonthlyBoldedDates);
}
else
{
Assert.Same(calendar.MonthlyBoldedDates, calendar.MonthlyBoldedDates);
}
Assert.True(calendar.IsHandleCreated);
Assert.Equal(0, invalidatedCallCount);
Assert.Equal(0, styleChangedCallCount);