Existe-t-il un moyen approprié de rompre avec un foreach de telle sorte que le IEnumerable <> sache que j'ai terminé et qu'il devrait nettoyer.une inquiétude sur le retour de rendement et la rupture d'un foreach
Consultez le code suivant:
private static IEnumerable<Person> getPeople()
{
using (SqlConnection sqlConnection = new SqlConnection("..."))
{
try
{
sqlConnection.Open();
using (SqlCommand sqlCommand = new SqlCommand("select id, firstName, lastName from people", sqlConnection))
{
using (SqlDataReader reader = sqlCommand.ExecuteReader())
{
while (reader.Read())
yield return new Person(reader.GetGuid(0), reader.GetString(1), reader.GetString(2));
}
}
}
finally
{
Console.WriteLine("finally disposing of the connection");
if (sqlConnection.State == System.Data.ConnectionState.Open)
sqlConnection.Close();
}
}
}
S'il consommateur ne rompt pas du foreach alors everthing est très bien et le lecteur retournera false, la boucle en willend et la fonction nettoie la commande de base de données et connexion . Mais que se passe-t-il si l'appelant se sépare de la foreach avant que j'aie fini?
voir aussi http://stackoverflow.com/questions/1400146/are-there-any-pitfalls-to-using-an-ienumerablet-return-type-for-sql-data/1400195# 1400195 –