Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用LINQ重构WPF、grid.Children迭代方法_Linq - Fatal编程技术网

使用LINQ重构WPF、grid.Children迭代方法

使用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逻辑转换为单个LINQ查询

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;