在 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;
}
}
我正在编写一个 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;
}
}