我有一个困难的LINQ表达式,我无法弄清楚它为什么不起作用。我得到的语法错误是
Enumerable.Select<TSource, TResult>(IEnumerable<TSource>, Func<TSource, TResult>)
的参数类型不能 从用法推断。尝试指定类型参数 明确。
错误发生在第二个Select
语句x.Select
上。我正在尝试从allFactors
中抓取每个列表列表中的一个元素,并将它们添加到一起,并保留在tempList
中添加到一起的每个分组。换句话说,我想在tempList
中将各个元素保持在一起,并在temp
中了解它们的总数。
代码allFactors
的早期版本中填充了值。如何明确指定类型或以其他方式执行此操作。我无法理解为什么它也没有推断出类型。
int temp = 0;
//List<List<int>> allFactors = new List<List<int>>();
List<int> tempList = new List<int>();
allFactors.Select(x => x.Select(y => { temp += y; tempList.Add(y); }));
编辑: 大卫的答案确实解决了语法错误!不幸的是,通过进一步的测试,我意识到我的代码没有做我想做的事情。我真正想要的是获得每个排列,其中每个组仅由列表列表中的一个元素组成。举个例子:
List<List<int>> oldList = {{1,2},{3,4}};
List<List<int>> newList = {{1,3},{1,4},{2,3},{2,4}};
我正在寻找将oldList
转换为newList
的方法。挑战在于我不知道将有多少嵌套列表或每个列表中有多少项。有任何想法吗?感谢大家到目前为止的想法。
答案 0 :(得分:4)
无法推断类型,因为您没有通过内部选择返回任何内容。作为结果,编译器没有任何东西要推断外部选择。
此外,由于您未使用所选的回报,因此可以使用.ForEach()
代替。
int temp = 0;
List<List<int>> allFactors = new List<List<int>>();
List<int> tempList = new List<int>();
allFactors.ForEach(x => x.ForEach(y => { temp += y; tempList.Add(y); }));
如果您想坚持.Select()
,则需要从内部选择中返回值,并使用.SelectMany()
作为外部选择。
int temp = 0;
List<List<int>> allFactors = new List<List<int>>();
List<int> tempList = new List<int>();
List<int> selectedList = allFactors.SelectMany(x => x.Select(y =>
{
temp += y;
tempList.Add(y);
return y;
})).ToList();
这将产生一个平坦的&#34; List<int>
,这似乎与tempList
的最终目标一致。
答案 1 :(得分:1)
如果你想要扁平化“allFactors”,你可以这样:
var tempList = allFactors.SelectMany(x => x).ToList();
var temp = tempList.Sum();
如果您只需要每个列表的第一个元素,那么它将是:
var tempList = allFactors.Select(x => x.First()).ToList();
var temp = tempList.Sum();