Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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
C#将具有嵌套集合的匿名对象转换为IEnumerable-最好使用';as';关键词_C#_Object_Casting_Anonymous - Fatal编程技术网

C#将具有嵌套集合的匿名对象转换为IEnumerable-最好使用';as';关键词

C#将具有嵌套集合的匿名对象转换为IEnumerable-最好使用';as';关键词,c#,object,casting,anonymous,C#,Object,Casting,Anonymous,我的代码接收由另一个方法创建的匿名对象。我想访问并遍历这个对象中的嵌套集合。我试图想出几种不同的方法来使用“as”关键字来播放它,但没有用 以下是创建对象的代码: var result = new object(); foreach (var item in items) { result = new { Variants

我的代码接收由另一个方法创建的匿名对象。我想访问并遍历这个对象中的嵌套集合。我试图想出几种不同的方法来使用“as”关键字来播放它,但没有用

以下是创建对象的代码:

            var result = new object();
            foreach (var item in items)
            {
                result = new
                {
                    Variants = item.Value.Select(m => m.Item2).GroupBy(n => n.Item1).Select(r => new
                    {
                        Name = r.Key,
                        Items = r.Select(p => new
                        {
                            Value = p.Item2.Trim(),
                            Text = p.Item2.Substring(0, p.Item2.LastIndexOf('_')).Trim()
                        }).Where(p => !string.IsNullOrEmpty(p.Text)).ToList()
                    })
                };
            }
当我将鼠标悬停在接收此匿名类型的变量上时,Visual Studio会给我以下签名:

{ Variants = {System.Linq.Enumerable.WhereSelectEnumerableIterator<System.Linq.IGrouping<string, System.Tuple<string, string>>, <>f__AnonymousType1<string, System.Collections.Generic.List<<>f__AnonymousType2<string, string>>>>} }
{Variants={System.Linq.Enumerable.whereselectEnumerableInterator}
简而言之:我想访问集合的文本字段。

以下是显示此对象的结构和数据的QuickWatch窗口:

非常感谢您的帮助


PS:无法更改发送方法中的代码。

如果没有静态类型的类,则无法强制转换该类。对于匿名类型,拥有它的类型意味着您要么在方法中本地拥有它,要么作为泛型方法的参数获取它——这里的情况都不是这样


您的选项实际上仅限于某种类型的反射以深入匿名类。最简单的方法是让运行时通过依赖
dynamic
like
((dynamic)myVariable).Text
result.Variants.SelectMany(v=>v.Items.SelectMany(i=>i.Text))
项的外观如何?这是一个元组列表?请分享。你也可以看看这个examples@PavelAnikhouski
items
的签名是:
IEnumerable
我接受这个答案。它给了我一些解决问题的思路和方向。非常感谢。