2017-08-08 70 views
0

代码中的日期变更时随机 “出现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' 

我怎样才能避免呢?

+0

您应该检查args.AddedDates是否包含绑定之前的一些元素以获取第一个元素并将其转换。 – swatsonpicken

回答

0

到其他的答案相似,但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(); 
} 
+1

我会在这里添加一个子句,说这(空条件)只能在c#6+上工作。 –

+0

公平点@Michael Coxon。据此编辑。 – swatsonpicken

0

这是因为您正在调用.First()的东西,其中不包含任何内容/为空。如果您在空集合上调用它,更好的方法是致电FirstOrDefault()返回null而不是异常。

0

这意味着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(); 
    } 
} 
0

有几件事情,你可以在这里做...

首先,你可以允许一个空的集合..

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财产。