【问题标题】:DateTime, an exception of type 'System.InvalidOperationException'DateTime,“System.InvalidOperationException”类型的异常
【发布时间】:2013-06-06 08:56:11
【问题描述】:

我正在使用的 TimePicker 遇到此问题。 当我没有选择任何时间时,我会收到此错误:

An exception of type 'System.InvalidOperationException'

异常发生的地方在这一行:

DateTime break1S = (DateTime)startBreak1.Value;

问题是当你没有在选择器中设置任何值时它会设置一个默认值。 但它为什么不使用它呢?以下是局部变量的样子:

你可以看到break1S有一个值那么问题是什么。

这是完整的代码:

 DateTime date = (DateTime)datePicker.Value;
 DateTime start = (DateTime)startingTime.Value;
 DateTime end = (DateTime)endingTime.Value;
 DateTime break1S = (DateTime)startBreak1.Value;
 DateTime break1E = (DateTime)endBreak1.Value;
 DateTime break1S = (DateTime)startBreak1.Value;
 DateTime break1E = (DateTime)endBreak1.Value;
 DateTime break2S = (DateTime)startBreak2.Value;
 DateTime break2E = (DateTime)endBreak2.Value;

            _nestedDateStart = new DateTime(date.Year, date.Month, date.Day, start.Hour, start.Minute, 0);
            _nestedDateEnd = new DateTime(date.Year, date.Month, date.Day, end.Hour, end.Minute, 0);
            _nestedDateStartBreak1 = new DateTime(date.Year, date.Month, date.Day, break1S.Hour, break1S.Minute, 0);
            _nestedDateEndBreak1 = new DateTime(date.Year, date.Month, date.Day, break1E.Hour, break1E.Minute, 0);

【问题讨论】:

  • 请显示异常的确切错误信息。它旨在阅读,因为大多数时候它包含重要信息。
  • 你检查你的 startBreak1 的值了吗?你检查它是否为空?调试时startBreak1是什么?

标签: c# datetime windows-phone-8 timepicker


【解决方案1】:

嗯,你应该检查一下,在那一刻,“startBreak1”项目中有什么。可能是从 startBreak1.Value 转换为 DateTime 导致了这个错误。

Break1S 有一个值,但这与问题无关,因为 ir 是 0001 年 1 月 1 日 - 任何 DateTime 结构的初始值。问题很可能是由于演员表(如果 startBreak1.Value 是 DateTime? 或 Nullable,那么您的选择是使用另一种类型的构造,即

DateTime break1S = startBreak1.Value.HasValue ? startBreak1.Value.Value : DateTime.MinValue;

请注意,您可以使用 DateTime.Now、DateTime.Today、DateTime.Now.AddMinutes(-10) 或任何您认为合适的默认值来代替 DateTime.MinValue,如果 startBreak1.Value 没有设置实际值。 )

【讨论】:

  • 这让我很开心。它真的像我想要的那样工作。非常感谢您的精彩回答。
【解决方案2】:

我不是 Windows Phone 专家,但在我看来 TimePicker 控件的 Value 属性被定义为 DateTime?表示可以为空的 DateTime。
当您尝试将其分配给 DateTime 变量(不能接受空值)并且 TimePicker 为空时,您会得到 InvalidOperationException

你可以试试

startBreak1  = startBreak1.Value ?? DateTime.MinValue;

【讨论】:

    【解决方案3】:

    检查 DateTimePicker 的“MinDate”和“MaxDate”属性。

    “1/1/0001 12:00:00 AM”可能不在它们之间。

    【讨论】:

      猜你喜欢
      • 2018-06-08
      • 2020-04-04
      • 2018-12-03
      • 1970-01-01
      • 2014-02-19
      • 1970-01-01
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多