在 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();
}