【问题标题】:Random "InvalidOperationException" when changing date in CalendarView [UWP] [duplicate]在 CalendarView [UWP] 中更改日期时出现随机“InvalidOperationException” [重复]
【发布时间】:2017-08-08 16:23:58
【问题描述】:

代码

private void DateChanged(CalendarView sender, CalendarViewSelectedDatesChangedEventArgs args)
{
    var myDate = args.AddedDates.First();
    string parsedDate = myDate.ToString();
}

随机导致此异常

System.InvalidOperationException: 'Sequence contains no elements'

如何避免?

【问题讨论】:

  • 您应该检查 args.AddedDates 是否包含一些元素,然后才能获取第一个元素并进行转换。

标签: c# exception uwp invalidoperationexception calendarview


【解决方案1】:

与其他答案类似,但 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。相应地进行了编辑。
【解决方案2】:

这是因为您正在调用.First() 的内容不包含任何内容/为空。一个更好的主意是调用 FirstOrDefault(),如果你在空集合上调用它,它会返回 null 而不是异常。

var myDate = args.AddedDates.FirstOrDefault();
if(myDate != null)
    MyButton.Content = myDate.ToString();

【讨论】:

    【解决方案3】:

    您可以在这里做几件事...

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

    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 属性中。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多