我有一个Question对象列表,我使用ForEach
来遍历列表。对于每个对象,我执行.Add
将其添加到我的实体框架中,然后添加到数据库中。
List<Question> add = problem.Questions.ToList();
add.ForEach(_obj => _uow.Questions.Add(_obj));
我需要修改ForEach
中的每个对象,并将AssignedDate
字段设置为DateTime.Now
。有没有办法可以在ForEach
循环中执行此操作?
答案 0 :(得分:50)
你会做类似
的事情add.ForEach(_obj =>
{
_uow.Questions.Add(_obj);
Console.WriteLine("TADA");
});
中的示例
以下示例演示了Action委托的用法 打印List对象的内容。在此示例中,打印 method用于向控制台显示列表的内容。在 另外,C#示例还演示了匿名的使用 将内容显示到控制台的方法。注意这个例子 没有显式声明一个Action变量。相反,它通过了 对带有单个参数的方法的引用 不返回List.ForEach方法的值,其单一 参数是一个Action委托。同样,在C#示例中,一个 Action委托没有显式实例化,因为 匿名方法的签名与。的签名相匹配 List.ForEach方法所期望的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
*/
答案 1 :(得分:2)
foreach(var itemToAdd in add)
{
Do_first_thing(itemToAdd);
Do_Second_Thing(itemToAdd);
}
或者如果您坚持在ForEach
List<>
方法
add.ForEach(itemToAdd =>
{
Do_first_thing(itemToAdd);
Do_Second_Thing(itemToAdd);
});
就个人而言,我会选择第一个,更清楚。
答案 2 :(得分:1)
很可能你不需要这样做。只需使用普通的foreach
:
foreach (var question in problem.Questions)
{
question.AssignedDate = DateTime.Now;
_uow.Questions.Add(question);
}
除非有特殊原因要使用lambda,否则foreach
更清晰,更易读。作为额外的奖励,它不会强迫您将问题集合实现到列表中,最有可能减少应用程序的内存占用。
答案 3 :(得分:0)
使用foreach声明
foreach (Question q in add)
{
_uow.Questions.Add(q);
q.AssignedDate = DateTime.Now;
}
或作为旁观者建议在_obj.AssignedDate = DateTime.Now;
方法中执行.ForEach(
答案 4 :(得分:0)
喜欢这个
add.ForEach(_obj =>
{
_obj.AssignedDate = DateTime.Now;
_uow.Questions.Add(_obj);
});
答案 5 :(得分:0)
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);
});