在 C# 中将 IEnumerable 与 foreach 循环一起使用

Using IEnumerable with foreach loop in C#

我正在编写一个 C# 应用程序,它将数据从远程数据库同步到我的 MySQL Web 应用程序,我需要有关如何更好地完成这项工作的建议。

在我的 C# 应用程序中,我建立了到远程 MySQL 数据库的连接,并将该连接传递给一个函数,该函数运行一个循环以将查询列表(每次迭代中一个)传递给另一个函数执行每个查询。它的编写方式非常有效,但使用 foreach 循环和 IEnumerable 函数似乎适得其反。我不确定它现在的编写方式是否有意义,我想知道我是否可以在没有 foreach 循环的情况下编写它,同时尽可能保留 IEnumerable 函数。

private void UpdateRecords(MySqlConnection connection) {
    foreach (string query in UpdateQueries(connection, _queries)) { }
}
private IEnumerable<string> UpdateQueries(MySqlConnection connection, List<string> queries) {
    List<string>.Enumerator enumerator = queries.GetEnumerator();
    while (enumerator.MoveNext()) {
        MySqlCommand command = new MySqlCommand();
        command.Connection = connection;
        command.CommandText = enumerator.Current;
        command.ExecuteNonQuery();
        yield return enumerator.Current;
    }
}

编辑:向 UpdateQueries 函数添加了 4 行,描述了此函数中 MySQL 连接的使用。

_queries 本身是可枚举的(因为它是一个 List<string> which implements IEnumerable<string>,所以你可以将其重写为:

private void UpdateRecords(MySqlConnection connection) 
{
    foreach (string query in _queries) 
    {
        // process query
    }
}

我不确定你为什么要使用 Enumerator。你可以 foreach List

private IEnumerable<string> UpdateQueries(MySqlConnection connection, List<string> queries)
{
    foreach (var query in queries)
    {
        MySqlCommand command = new MySqlCommand();
        command.Connection = connection;
        command.CommandText = query;
        command.ExecuteNonQuery();
        yield return query;
    }
}