2010-08-11 6 views
18

J'ai cette boucle, son but est de parcourir une plage de dates et d'effectuer une certaine logique pour automatiser l'ajout d'entrées dans la base de données. Le problème est que la partie incrémentée, date.AddDays (1.0) ne fonctionne pas, et est toujours le même résultat, provoquant une boucle infinie. Un aperçu?Utilisation de DateTime dans une boucle For, la date d'incrémentation ne fonctionne pas

for (DateTime date = DateTime.Now; futureDate.CompareTo(date) > 0; date.AddDays(1.0)) 
{ 
    // logic here 
} 

Répondre

55

DateTime.AddDays retourne une nouvelle instance sans modifier date. En ce moment vous jetez cette nouvelle instance. , Vous avez besoin au lieu de le faire:

for (DateTime date = DateTime.Now; futureDate.CompareTo(date) > 0; date = date.AddDays(1.0)) 
{ 
    // logic here 
} 

Aussi, je ne sais pas pourquoi vous appelez CompareTo lorsque vous pouvez utiliser l'opérateur <. Je ne peux pas dire si CompareTo(date) > 0 est correct sans y penser pendant un moment, alors que l'intention de l'opérateur < est évident:

for (DateTime date = DateTime.Now; date < futureDate; date = date.AddDays(1.0)) 
{ 
    // logic here 
} 
7

DateTime est immuable. Remplacez par: date = date.AddDays (1.0)