在 CalendarView [UWP] 中更改日期时随机 "InvalidOperationException"
Random "InvalidOperationException" when changing date in CalendarView [UWP]
代码
private void DateChanged(CalendarView sender, CalendarViewSelectedDatesChangedEventArgs args)
{
var myDate = args.AddedDates.First();
string parsedDate = myDate.ToString();
}
随机导致这个异常
System.InvalidOperationException: 'Sequence contains no elements'
如何避免?
这是因为您正在对不包含 anything/is 空的内容调用 .First()
。如果你在一个空集合上调用它,一个更好的主意是调用 FirstOrDefault()
which returns null
而不是异常。
var myDate = args.AddedDates.FirstOrDefault();
if(myDate != null)
MyButton.Content = myDate.ToString();
表示args.AddedDates为NULL或为空。
因此,为避免此错误,您需要检查它是否不为 null 或为空。
private void DateChanged(CalendarView sender, CalendarViewSelectedDatesChangedEventArgs args)
{
if (args.AddedDates != null && args.AddedDates.Count > 0)
{
var myDate = args.AddedDates.First();
string parsedDate = myDate.ToString();
}
}
您可以在这里做几件事...
首先你可以允许一个空集合..
private void DateChanged(CalendarView sender, CalendarViewSelectedDatesChangedEventArgs args)
{
var myDate = args.AddedDates.FirstOrDefault();
if (myDate != null)
{
string parsedDate = myDate.ToString();
}
}
其次你可以事先检查集合...
private void DateChanged(CalendarView sender, CalendarViewSelectedDatesChangedEventArgs args)
{
if(args.AddedDates != null || args.AddedDates.Any())
{
var myDate = args.AddedDates.First();
string parsedDate = myDate.ToString();
}
}
一些简单的调试会告诉您问题可能出在 AddedDates
属性.
与其他答案类似,但 args
也可以为空,所以我会使用:
if (args?.AddedDates != null && args.AddedDates.Any())
{
var myDate = args.AddedDates.First();
string parsedDate = myDate.ToString();
}
编辑:
如前所述,以上仅适用于 C# 6.0 或更高版本。适用于所有版本的替代方法是:
if (args != null && args.AddedDates != null && args.AddedDates.Any())
{
var myDate = args.AddedDates.First();
string parsedDate = myDate.ToString();
}
代码
private void DateChanged(CalendarView sender, CalendarViewSelectedDatesChangedEventArgs args)
{
var myDate = args.AddedDates.First();
string parsedDate = myDate.ToString();
}
随机导致这个异常
System.InvalidOperationException: 'Sequence contains no elements'
如何避免?
这是因为您正在对不包含 anything/is 空的内容调用 .First()
。如果你在一个空集合上调用它,一个更好的主意是调用 FirstOrDefault()
which returns null
而不是异常。
var myDate = args.AddedDates.FirstOrDefault();
if(myDate != null)
MyButton.Content = myDate.ToString();
表示args.AddedDates为NULL或为空。 因此,为避免此错误,您需要检查它是否不为 null 或为空。
private void DateChanged(CalendarView sender, CalendarViewSelectedDatesChangedEventArgs args)
{
if (args.AddedDates != null && args.AddedDates.Count > 0)
{
var myDate = args.AddedDates.First();
string parsedDate = myDate.ToString();
}
}
您可以在这里做几件事...
首先你可以允许一个空集合..
private void DateChanged(CalendarView sender, CalendarViewSelectedDatesChangedEventArgs args)
{
var myDate = args.AddedDates.FirstOrDefault();
if (myDate != null)
{
string parsedDate = myDate.ToString();
}
}
其次你可以事先检查集合...
private void DateChanged(CalendarView sender, CalendarViewSelectedDatesChangedEventArgs args)
{
if(args.AddedDates != null || args.AddedDates.Any())
{
var myDate = args.AddedDates.First();
string parsedDate = myDate.ToString();
}
}
一些简单的调试会告诉您问题可能出在 AddedDates
属性.
与其他答案类似,但 args
也可以为空,所以我会使用:
if (args?.AddedDates != null && args.AddedDates.Any())
{
var myDate = args.AddedDates.First();
string parsedDate = myDate.ToString();
}
编辑:
如前所述,以上仅适用于 C# 6.0 或更高版本。适用于所有版本的替代方法是:
if (args != null && args.AddedDates != null && args.AddedDates.Any())
{
var myDate = args.AddedDates.First();
string parsedDate = myDate.ToString();
}