【发布时间】:2017-06-14 16:18:47
【问题描述】:
我正在编写一个 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 连接的使用。
【问题讨论】:
-
为什么要将连接传递给
UpdateQueries?为什么不放弃这一切,只做foreach (var query in _queries) { }? -
我不明白
UpdateQueries的意思,UpdateRecords代码似乎等同于foreach (string query in _queries) { /* proccess query */ } -
@ChrisPickford 我编辑了帖子以说明为什么将连接传递给 UpdateQueries 函数。
-
我的观点仍然成立;你正在用
UpdateQueries重新发明轮子。请参阅下面的答案,了解如何更好地构建它。 -
@apokryfos 这也是我不确定的。如果没有 foreach,UpdateQueries 函数就不会迭代,我理解这是多余的。我只包含 UpdateQueries 用于学习目的。
标签: c# foreach ienumerator