C# 将具有嵌套集合的匿名对象转换为 IEnumerable - 最好使用 'as' 关键字
C# Converting an anonymous object with nested collection into an IEnumerable - preferably using the 'as' keyword
我的代码接收到一个由另一种方法创建的匿名对象。我想访问并遍历此对象中的嵌套集合。我试图想出几种不同的方法来使用 '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>>>>} }
简而言之:我想访问集合的 Text 字段。
这是显示该对象的结构和数据的快速观察 window:
QuickWatch Window
非常感谢任何帮助!
PS: 无法更改发送方式中的代码。
如果您没有 class 的静态类型,则无法转换为它。对于具有其类型的匿名类型意味着您要么在方法中本地拥有它,要么作为泛型方法的参数获取 - 这里都不是这种情况。
你的选择真的仅限于某种反思来挖掘匿名 class。最简单的方法是让运行时通过依赖 dynamic
来处理反射,比如 ((dynamic)myVariable).Text
.
我的代码接收到一个由另一种方法创建的匿名对象。我想访问并遍历此对象中的嵌套集合。我试图想出几种不同的方法来使用 '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>>>>} }
简而言之:我想访问集合的 Text 字段。
这是显示该对象的结构和数据的快速观察 window: QuickWatch Window
非常感谢任何帮助!
PS: 无法更改发送方式中的代码。
如果您没有 class 的静态类型,则无法转换为它。对于具有其类型的匿名类型意味着您要么在方法中本地拥有它,要么作为泛型方法的参数获取 - 这里都不是这种情况。
你的选择真的仅限于某种反思来挖掘匿名 class。最简单的方法是让运行时通过依赖 dynamic
来处理反射,比如 ((dynamic)myVariable).Text
.