随机 “出现InvalidOperationException” 在CalendarView [UWP]
代码中的日期变更时随机 “出现InvalidOperationException” 在CalendarView [UWP]
private void DateChanged(CalendarView sender, CalendarViewSelectedDatesChangedEventArgs args)
{
var myDate = args.AddedDates.First();
string parsedDate = myDate.ToString();
}
随机导致该异常
System.InvalidOperationException: 'Sequence contains no elements'
我怎样才能避免呢?
到其他的答案相似,但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();
}
我会在这里添加一个子句,说这(空条件)只能在c#6+上工作。 –
公平点@Michael Coxon。据此编辑。 – swatsonpicken
这是因为您正在调用.First()
的东西,其中不包含任何内容/为空。如果您在空集合上调用它,更好的方法是致电FirstOrDefault()
返回null
而不是异常。
这意味着args.AddedDates为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.AddedDates是否包含绑定之前的一些元素以获取第一个元素并将其转换。 – swatsonpicken