使用LINQ重构WPF、grid.Children迭代方法
我的目标是将这个foreach逻辑转换为单个LINQ查询使用LINQ重构WPF、grid.Children迭代方法,linq,Linq,我的目标是将这个foreach逻辑转换为单个LINQ查询 foreach (var anyItem in gridReference.Children) { var enumerableCheck = anyItem as ListBox; if (enumerableCheck != null) { foreach (var collectionItem in enumerableCheck.Items) {
foreach (var anyItem in gridReference.Children)
{
var enumerableCheck = anyItem as ListBox;
if (enumerableCheck != null)
{
foreach (var collectionItem in enumerableCheck.Items)
{
//check collectionItem is of type T
}
}
else
{
//check anyItem is of type T
}
}
我试着用这种重构来学习linq,但是语法错误真的令人讨厌,因为我已经习惯了C。而且我不知道如何在linq中分配一个工作变量,这会导致不断的强制转换
尝试:
我认为在linq中使用let子句是一个很好的例子,可以检查该类型。 为了确保只返回符合T的项目,可以使用OfType 编辑: 根据评论:
List<T> result = (from element1 in gridReference.Children.OfType<ListBox>().ToList()
select element1.Items.OfType<T>()).ToList();
我认为在linq中使用let子句是一个很好的例子,可以检查该类型。 为了确保只返回符合T的项目,可以使用OfType 编辑: 根据评论:
List<T> result = (from element1 in gridReference.Children.OfType<ListBox>().ToList()
select element1.Items.OfType<T>()).ToList();
多亏了马多克斯令人鼓舞的回答,我测试了一个有效的查询
IEnumerable <T> genericQuery = (from element1 in gridReference.Children.OfType <ListBox>()
from boxItem in element1.Items.OfType <T>()
select boxItem)
.Concat (from element2 in gridReference.Children.OfType <T>()
select element2);
多亏了马多克斯令人鼓舞的回答,我测试了一个有效的查询
IEnumerable <T> genericQuery = (from element1 in gridReference.Children.OfType <ListBox>()
from boxItem in element1.Items.OfType <T>()
select boxItem)
.Concat (from element2 in gridReference.Children.OfType <T>()
select element2);
gridReference.Children.OfType我的意思是:可以使用OfType两次。该编辑生成编译错误:无法将类型“System.Collections.Generic.List”隐式转换为“System.Collections.Generic.List”WAV2ByteArray。您的回答非常鼓舞人心,激励我学习let,of type,nested,所有这些都帮助我完成了一个工作查询!gridReference.Children.OfType我的意思是:可以使用OfType两次。该编辑生成编译错误:无法将类型“System.Collections.Generic.List”隐式转换为“System.Collections.Generic.List”WAV2ByteArray。您的回答非常鼓舞人心,激励我学习let,of type,nested,所有这些都帮助我完成了一个工作查询!纯粹是为了选择:var genericQuery=来自gridReference中的UIElement e。来自e中le的子元素作为ListBox?项??新[]{e}.aseneumerable select le.OfType;纯粹是为了选择:var genericQuery=来自gridReference中的UIElement e。来自e中le的子元素作为ListBox?项??新[]{e}.aseneumerable select le.OfType;