C# DateTime,类型为';系统无效操作异常';

C# DateTime,类型为';系统无效操作异常';,c#,datetime,windows-phone-8,timepicker,C#,Datetime,Windows Phone 8,Timepicker,我使用的计时器有这个问题。 当我没有选择任何时间时,我会出现以下错误: An exception of type 'System.InvalidOperationException' 发生异常的位置在这一行: DateTime break1S = (DateTime)startBreak1.Value; 问题是,当您不在选择器中设置任何值时,它会设置默认值。 但是为什么它不使用它呢?以下是局部变量的外观: 您可以看到break1S有一个值,所以问题出在哪里 以下是全部代码: DateTi

我使用的计时器有这个问题。 当我没有选择任何时间时,我会出现以下错误:

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);

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

你可以试试看

startBreak1  = startBreak1.Value ?? DateTime.MinValue;

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


“1/1/0001 12:00:00 AM”可能不会介于两者之间。

好吧,您应该检查一下,在这一时刻,“startBreak1”项中有什么内容。可能是从startBreak1.Value到DateTime的转换导致了此错误

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

DateTime break1S = startBreak1.Value.HasValue ? startBreak1.Value.Value : DateTime.MinValue;
请注意,如果startBreak1.Value未设置实际值,则可以使用DateTime.Now、DateTime.Today、DateTime.Now.AddMinutes(-10)或任何您认为合适的默认值,而不是DateTime.MinValue。
)

请显示异常的确切错误消息。它是用来阅读的,因为大多数时候它都包含重要的信息。你有没有检查startBreak1的值?你检查过它是否为空吗?调试时startBreak1是什么?这让我很开心。它真的像我想要的那样工作。非常感谢你的回答。