gpt4 book ai didi

c# - 将 foreach 循环嵌套到 lambda 表达式

转载 作者:太空宇宙 更新时间:2023-11-03 18:07:46 25 4
gpt4 key购买 nike

我目前正在重构我正在就读的大学正在做的一个项目。这种重构的一部分是使项目的某些部分更简洁,并使用更少的代码。有时我会运行几个 foreach 循环并将内容添加到列表中。

我有以下按预期工作的代码块

private List<Literal> GetClashingLiterals(ClauseNode other)
{
List<Literal> clashes = new List<Literal>();
foreach (Literal literal in literals)
{
foreach (Literal otherlit in other.literals)
{
if (literal.Name.Equals(otherlit.Name)
&& !(literal.Sign.Equals(otherlit.Sign)))
{
clashes.Add(literal);
}
}
}
return clashes;
}

我想将这段代码转换为 lambda 表达式。我在 stackoverflow C# - Populate a list using lambda expressions or LINQ 上发现了这个老问题.

我认为这正是我所需要的,所以我制作了这个 lambda 表达式并对其进行了测试:
List<Literal> clashes = (List<Literal>)literals
.Where(lit => other.literals
.Any(lit2 => lit.Name.Equals(lit2.Name)
&& !lit.Sign.Equals(lit2.Sign)));

但是它不起作用。每当我尝试运行它时,我都会收到 InvalidCastException。没有类型转换,它不会编译!那我错过了什么?

这是一个异常(exception):

Unable to cast object of type 'WhereEnumerableIterator1[Heureka.Model.Literal]' to type 'System.Collections.Generic.List1[Heureka.Model.Literal]'.

最佳答案

正如错误所说,LINQ 方法不返回 List<T> .如果您需要 List<T> ,您需要调用ToList()

List<Literal> clashes =  literals
.Where(lit => other.literals
.Any(lit2 => lit.Name.Equals(lit2.Name) && !lit.Sign.Equals(lit2.Sign)))
.ToList();

关于c# - 将 foreach 循环嵌套到 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23500528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com