我有一个问题对象的列表,我使用ForEach
循环遍历该列表。对于每个对象,我执行.Add
将其添加到我的实体框架中,然后添加到数据库中。
List<Question> add = problem.Questions.ToList();
add.ForEach(_obj => _uow.Questions.Add(_obj));
我需要修改ForEach
中每个对象并将AssignedDate
字段设置为DateTime.Now
。我能在ForEach
循环内部完成吗?
我有一个问题对象的列表,我使用ForEach
循环遍历该列表。对于每个对象,我执行.Add
将其添加到我的实体框架中,然后添加到数据库中。
List<Question> add = problem.Questions.ToList();
add.ForEach(_obj => _uow.Questions.Add(_obj));
我需要修改ForEach
中每个对象并将AssignedDate
字段设置为DateTime.Now
。我能在ForEach
循环内部完成吗?
你可以像这样做
add.ForEach(_obj =>
{
_uow.Questions.Add(_obj);
Console.WriteLine("TADA");
});
请查看Action Delegate中的示例。
以下示例演示了使用Action委托打印List对象内容。在该示例中,Print方法用于将列表内容显示到控制台。此外,C#示例还演示了使用匿名方法将内容显示到控制台。请注意,示例未显式声明Action变量。相反,它将对单个参数且不返回值的方法的引用传递给List.ForEach方法,该方法的单个参数是Action委托。同样,在C#示例中,因为匿名方法的签名与List.ForEach方法期望的Action委托的签名相匹配,所以不需要显式实例化Action委托。
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<String> names = new List<String>();
names.Add("Bruce");
names.Add("Alfred");
names.Add("Tim");
names.Add("Richard");
// Display the contents of the list using the Print method.
names.ForEach(Print);
// The following demonstrates the anonymous method feature of C#
// to display the contents of the list to the console.
names.ForEach(delegate(String name)
{
Console.WriteLine(name);
});
names.ForEach(name =>
{
Console.WriteLine(name);
});
}
private static void Print(string s)
{
Console.WriteLine(s);
}
}
/* This code will produce output similar to the following:
* Bruce
* Alfred
* Tim
* Richard
* Bruce
* Alfred
* Tim
* Richard
*/
foreach(var itemToAdd in add)
{
Do_first_thing(itemToAdd);
Do_Second_Thing(itemToAdd);
}
或者,如果您坚持使用 List<>
上的 ForEach
方法
add.ForEach(itemToAdd =>
{
Do_first_thing(itemToAdd);
Do_Second_Thing(itemToAdd);
});
个人而言,我会选择第一个选项,因为它更加清晰易懂。
很可能您不需要以这种方式处理事情。只需使用简单的foreach
:
foreach (var question in problem.Questions)
{
question.AssignedDate = DateTime.Now;
_uow.Questions.Add(question);
}
除非有特定的原因需要使用lambda表达式,否则foreach
更加简洁易读。额外的好处是它不会强制将问题集合转换为列表,很可能减少应用程序的内存占用。
foreach (Question q in add)
{
_uow.Questions.Add(q);
q.AssignedDate = DateTime.Now;
}
或者像一个标准建议那样,在.ForEach(
方法中写入_obj.AssignedDate = DateTime.Now;
像这样
add.ForEach(_obj =>
{
_obj.AssignedDate = DateTime.Now;
_uow.Questions.Add(_obj);
});
add.ForEach(delegate(Question q)
{
// This is anonymous method and you can do what ever you want inside it.
// you can access THE object with q
Console.WriteLine(q);
});
foreach
语句即可。除非你有特定的理由使用 lambda,但这很不可能,否则你正在使它变得不必要复杂。 - Jon_obj => { 一堆操作 }
,但我不建议这样做。简单的 foreach 更加清晰易懂。 - Sergey Berezovskiy