有没有其他方法可以避免 Foreach 循环?
Is there any alternate way of avoiding the Foreach loop?
请看下面的代码
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<Employee> employeeCollection = new List<Employee>();
for (int i = 1; i < 10; i++) employeeCollection.Add(new Employee {
EmployeeID = i,
EmployeeName = string.Concat("Employee", i),
Email = string.Concat("Email", i) });
//loop thru every record
foreach (Employee e in employeeCollection)
{
SendEMail(e);
}
}
private static void SendEMail(Employee employee)
{
// do something
}
}
class Employee
{
public int EmployeeID { get; set; }
public string EmployeeName { get; set; }
public string Email { get; set; }
}
}
我必须对Employee的每条记录做一些操作。从今以后,我将使用 foreach 循环。如果记录的数量增加,操作的数量将同样增加。所以它将是 O(N)。
对此有更好的方法吗?
N.B.~我不是在找.foreach()
不用担心 O(N)
。关于现实生活中的性能,简单的算法复杂性很少是一个好的答案。昂贵的部分不是遍历员工列表,而是发送电子邮件。
例如,如果您的要求允许,您可以将一封电子邮件与多个收件人一起使用 - 当然,这只有在所有电子邮件都相同的情况下才有效。否则,在某种程度上,您只需发送 n 封单独的电子邮件。
当然,即便如此,仍然有很多方法可以提高感知性能。您可以一次将所有电子邮件排队,并向用户显示他们正在排队等候,而不是阻止 UI。您可以并行发送每封电子邮件。您可以将电子邮件发送到其他服务(例如 Microsoft Exchange)以处理 实际 为您发送的邮件。
最后,如果您要发送 100 封不同的电子邮件,则必须发送 100 封电子邮件。没有聪明的算法可以帮助你。
栾安说的对
但是为了简化您的代码,您可以在 employeeCollection 中添加 employee 的同时发送电子邮件,而无需再次循环 employeeCollection 来发送电子邮件。
像这样。
for (int i = 1; i < 10; i++)
{
var emp = new Employee
{
EmployeeID = i,
EmployeeName = string.Concat("Employee", i),
Email = string.Concat("Email", i)
};
employeeCollection.Add(emp);
SendEMail(emp);
}
请看下面的代码
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<Employee> employeeCollection = new List<Employee>();
for (int i = 1; i < 10; i++) employeeCollection.Add(new Employee {
EmployeeID = i,
EmployeeName = string.Concat("Employee", i),
Email = string.Concat("Email", i) });
//loop thru every record
foreach (Employee e in employeeCollection)
{
SendEMail(e);
}
}
private static void SendEMail(Employee employee)
{
// do something
}
}
class Employee
{
public int EmployeeID { get; set; }
public string EmployeeName { get; set; }
public string Email { get; set; }
}
}
我必须对Employee的每条记录做一些操作。从今以后,我将使用 foreach 循环。如果记录的数量增加,操作的数量将同样增加。所以它将是 O(N)。 对此有更好的方法吗?
N.B.~我不是在找.foreach()
不用担心 O(N)
。关于现实生活中的性能,简单的算法复杂性很少是一个好的答案。昂贵的部分不是遍历员工列表,而是发送电子邮件。
例如,如果您的要求允许,您可以将一封电子邮件与多个收件人一起使用 - 当然,这只有在所有电子邮件都相同的情况下才有效。否则,在某种程度上,您只需发送 n 封单独的电子邮件。
当然,即便如此,仍然有很多方法可以提高感知性能。您可以一次将所有电子邮件排队,并向用户显示他们正在排队等候,而不是阻止 UI。您可以并行发送每封电子邮件。您可以将电子邮件发送到其他服务(例如 Microsoft Exchange)以处理 实际 为您发送的邮件。
最后,如果您要发送 100 封不同的电子邮件,则必须发送 100 封电子邮件。没有聪明的算法可以帮助你。
栾安说的对
但是为了简化您的代码,您可以在 employeeCollection 中添加 employee 的同时发送电子邮件,而无需再次循环 employeeCollection 来发送电子邮件。
像这样。
for (int i = 1; i < 10; i++)
{
var emp = new Employee
{
EmployeeID = i,
EmployeeName = string.Concat("Employee", i),
Email = string.Concat("Email", i)
};
employeeCollection.Add(emp);
SendEMail(emp);
}