gpt4 book ai didi

c# - 使用 LINQ 将 List 转换为 List

转载 作者:太空宇宙 更新时间:2023-11-03 19:00:56 25 4
gpt4 key购买 nike

我有一个收藏 List<dynamic> dList .在那里,它有 string项目和 List<string>项目。现在我需要将所有值组织到一个列表中。

只需引用 List<dynamic> d列表

案例:1

List<dynamic> dList = new List<dynamic>()
{
"Selva",
new List<string>() {"Bala"},
new List<string>() {"Prayag", "Raj"},
"Pavithran"
};

案例:2

List<object> bala = new List<dynamic>()
{
"Selva",
new List<object>() {"Bala"},
new List<object>() {"Prayag", "Raj"},
"Pavithran"
};

上面两个List的输出是

enter image description here

我的预期输出是

enter image description here

我怎样才能从上面的 List<dynamic> 获得预期的结果? ?列表是在运行时生成的,我无法更改结构。

这是复杂 Linq 查询的一小部分,因此,我需要在 Linq 中实现它。

最佳答案

如果顺序很重要,那么您可以将每个元素转换为 List<string>然后展平这些:

List<dynamic> dList = new List<dynamic>()
{
"Selva",
new List<string>() {"Bala"},
new List<string>() {"Prayag", "Raj"},
"Pavithran"
};

var flattenedList = dList.SelectMany(d =>
{
if (d is string)
{
return new List<string>() { d };
}
else if (d is List<string>)
{
return (d as List<string>);
}
else
{
throw new Exception("Type not recognised");
}
});

或者,作为没有类型检查的性感单行代码(所以......使用风险自负!)

dList.SelectMany(d => d as List<string> ?? new List<string>() { d })

或者,最后,在 LINQ 语法中:

var newList = 
(from d in dList
from d2 in EnsureListOfString((object)d)
select d2
);

public List<string> EnsureListOfString(object arg)
{
List<string> rtn = arg as List<string>;

if (rtn == null)
{
if (arg is string)
{
rtn = new List<string>() { arg as string };
}
else
{
throw new Exception("Type not recognised.");
}
}

return rtn;
}

关于c# - 使用 LINQ 将 List<dynamic> 转换为 List,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36304323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com