【问题标题】:Why won't this while loop break?为什么这个while循环不会中断?
【发布时间】:2012-02-02 04:35:02
【问题描述】:

date[inc] = [0] = "01/01/2011"

dateTimePicker1.Value = {01/01/2011 00:00:00}

更改辅助日期时间选择器时永远不会满足 if 条件。第一个 datetimepicker 必须更改一次,然后此代码才能工作。在这两种情况下,此代码均由 ValueChanged 触发。

有什么想法吗?

编辑:

int start;
int inc = 0;
while (true)
{
   inc++;
   if (Convert.ToString(dateTimePicker1.Value.ToShortDateString()) == date[inc])
   {
      start = inc;
      inc = 0;
      break;
   }  
}

=/=

int start;
int inc = 0;
while (true)
{
   if (Convert.ToString(dateTimePicker1.Value.ToShortDateString()) == date[inc])
   {
      start = inc;
      inc = 0;
      break;
   }  
   inc++;
}

还是很有帮助的cmets,谢谢大家。显然是因为增量错过了第一个日期,导致死循环。

【问题讨论】:

  • 根据您的描述(“第一个 datetimepicker 必须更改一次才能使用此代码”),您发布的代码可能与实际问题无关。在运行此循环之前检查第一个 datetimepicker 的值。在第一种情况下,您可能会发现它是意外的(如空字符串)。 ValueChanged 事件仅在选择更改时触发,而不是第一次触发。
  • 我可能应该在回答之前问一下,但是您的文化设置是如何设置为短日期格式的?
  • 两者运行相同的代码,如上。但是,第二个陷入了无限循环。第一个选择器的值如图所示,直到此循环完成后才使用第二个选择器的日期。啊,我怎么检查这个?
  • 等等,为什么一开始就没有明确的终止条件的无限循环?如果inc 超出date 数组的末尾会发生什么?
  • 更重要的是Convert.ToString(dateTimePicker1.Value.ToShortDateString())的结果是什么?

标签: c# datetime datetimepicker


【解决方案1】:

试着像这样比较

if (dateTimePicker1.Value.ToString("MM/dd/yyyy",
       new System.Globalization.CultureInfo("en-US") == date[inc])

//Considering your date format is MM/dd/yyyy, coz 01/01/2011 doesn't help in uderstanding
//in date format, if it would have been 01/13/2011, it would have helped
if (dateTimePicker1.Value.Date == 
       DateTime.ParseExact(date[inc], "MM/dd/yyyy", 
           new System.Globalization.CultureInfo("en-US")).Date)

您也可以在date[inc] 上执行.Trim(),它可能会对您有所帮助。

编辑

当您比较 string 要查找的内容时

  • 开头和结尾的空格。如果需要,请使用 .Trim() 删除它们
  • 区分大小写。做string.Equals(string1, string2, StringComparison.InvariantCultureIgnoreCase)

希望这对你有用。

【讨论】:

  • 炫耀 :P 你一定真的想帮助这些人。 ;)
【解决方案2】:

试试:

if (dateTimePicker1.Value.ToString("MM/dd/yyyy") == date[inc])
// ...

【讨论】:

  • 不走运,不过这很有帮助!
【解决方案3】:

你正在做一个字符串比较:

"01/01/2011" != "1/1/2011"

【讨论】:

    【解决方案4】:

    如果字符串永远不相等,则永远没有条件突破

    【讨论】:

      猜你喜欢
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 2018-03-17
      相关资源
      最近更新 更多