問題:我的 Xamarin 專案中有一個頁面,它需要兩個用戶輸入的日期并檢查該范圍內的所有星期六和星期日,將所有這些日期添加到一個串列中,然后我可以計算并從一天的總數中扣除。當我運行第二個 datepicker 時,螢屏將在大約一分鐘后凍結并使應用程式崩潰。我的輸出視窗給了我 LOS 溢位訊息。當我在 'getWeekendCount()' 方法上放置斷點時,我發現 AddDays(1) 方法沒有增加 'date' 的值并且似乎在我認為導致溢位問題的同一日期上回圈。
我不明白為什么會發生這種情況,希望得到任何幫助。
public Calculator()
{
InitializeComponent();
//OnDateSelected(null, null);
dateFrom.SetValue(DatePicker.MinimumDateProperty, DateTime.Now);
dateTo.SetValue(DatePicker.MinimumDateProperty, DateTime.Now);
}
public int getWeekendCount(DateTime a, DateTime b)
{
List<DateTime> allDates = new List<DateTime>();
Console.WriteLine("Date From: " a.Date);
Console.WriteLine("Date To: " b.Date);
for (DateTime date = a.Date; date <= b.Date; date.AddDays(1))
{
if (date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday)
{
allDates.Add(date);
Console.WriteLine(allDates);
}
}
int weekendCount = allDates.Count();
return weekendCount;
}
void OnDateSelected(object sender, DateChangedEventArgs e)
{
if(dateTo.Date < dateFrom.Date)
{
leaveDaysLabel.Text = "Days: Invalid Selection";
}
else if (dateTo.Date == dateFrom.Date)
{
leaveDaysLabel.Text = "Days: 1";
}
else
{
Console.WriteLine("Date From: " dateFrom.Date);
Console.WriteLine("Date To: " dateTo.Date);
int count = getWeekendCount(dateFrom.Date, dateTo.Date);
Console.WriteLine(count);
int days = (dateTo.Date - dateFrom.Date).Days - count;
leaveDaysLabel.Text = String.Format("Days: {0}", days);
leaveHoursLabel.Text = "Hours: " (days * 7.4).ToString();
}
}
uj5u.com熱心網友回復:
如果您檢查AddDays定義,您將看到它不會修改您的變數。只回傳一個新的日期。所以你的回圈永遠持續下去
所以你應該改變你的回圈。一個例子
while(a.Date <= b.Date)
{
if (a.DayOfWeek != DayOfWeek.Saturday && a.DayOfWeek != DayOfWeek.Sunday)
{
allDates.Add(a);
Console.WriteLine(allDates);
}
a = a.AddDays(1);
}
另外,也許你應該只打電話WriteLine給日期a而不是整個串列。或者在回圈后列印整個串列。
快樂編碼!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/313155.html
上一篇:Xamarin黑色啟影片面
下一篇:我在構建程序中收到錯誤“無效的專案IDfirebaseappcheckinterop-16.0.0-beta01”
