DateTime,类型'System.InvalidOperationException'的例外

时间:2013-06-06 08:56:12

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

使用我正在使用的TimePicker出现此问题。 当我没有选择任何时候我收到此错误:

An exception of type 'System.InvalidOperationException'

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

DateTime break1S = (DateTime)startBreak1.Value;

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

Here you see that break1S have a 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);

3 个答案:

答案 0 :(得分:2)

好吧,你应该检查那一刻“startBreak1”项目中的内容。可能是从startBreak1.Value到DateTime的强制转换导致此错误。

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

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

请注意,而不是DateTime.MinValue您可以使用DateTime.Now,DateTime.Today,DateTime.Now.AddMinutes(-10)或您认为应该适当的任何内容默认情况下,如果startBreak1.Value没有设置实际值。 )

答案 1 :(得分:0)

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

您可以尝试使用

startBreak1  = startBreak1.Value ?? DateTime.MinValue;

答案 2 :(得分:0)

检查DateTimePicker的'MinDate'和'MaxDate'属性。

'1/1/0001 12:00:00 AM'可能不会落在他们之间。