将对象列表转换为元组列表而不进行迭代

ald*_*osa 4 c# linq generics entity-framework tuples

我正在尝试将一个额外的参数添加到ef对象列表中以跟踪处理,但我仍然不得不明确地初始化每个列表项.这样做的正确方法是什么?除了简洁之外,在这种情况下linq语法是否有任何优势?

List<app_subjects> subjectList = AppMySQLQueries.GetAllSubjects();
List<Tuple<app_subjects, bool>> subjectCollection = new List<Tuple<app_subjects, bool>>(subjectList.Count);

foreach (app_subjects subject in subjectList)
{
     subjectCollection.Add(Tuple.Create(subject, false));
}
Run Code Online (Sandbox Code Playgroud)

我搜索了网站但没有成功.

eva*_*nal 13

您只想在此处使用投影(Select),它将lambda表达式中的变换应用于源集合中的每个元素.

List<Tuple<app_subjects, bool>> tuples = subjectList.Select(x => new Tuple<app_subjects, bool>(x, false)).ToList();
Run Code Online (Sandbox Code Playgroud)

ToList()呼叫不是完全必要的,如果你删除它,然后该方法将返回IEnumerable<Tuple<app_subjects, bool>>.如果你只是在事后迭代元组的集合的ToList通话应该被删除,因为它会强制执行(枚举IEnumberable),然后你的下一个操作(的foreach)会做同样的,使得代码执行雪上加霜.


dca*_*tro 5

像这样?

subjectList.Select(s => Tuple.Create(s, false)).ToList();
Run Code Online (Sandbox Code Playgroud)