首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将LINQ查询转换为列表

将LINQ查询转换为列表
EN

Stack Overflow用户
提问于 2013-04-12 18:27:15
回答 4查看 632关注 0票数 2

下面是我使用排列列表的函数:

代码语言:javascript
复制
public static IEnumerable<IEnumerable<T>> Permute<T>(IEnumerable<T> list)
        {
            if (list.Count() == 1)
                return new List<IEnumerable<T>> { list };

            return list.Select((a, i1) => Permute(
                            list.Where((b, i2) => i2 != i1)).Select(
                                    b => (new List<T> { a }).Union(b))
                            ).SelectMany(c => c);
        }

按照以下方式使用它:

代码语言:javascript
复制
var SFP_vars = Permute(SFP);

其中,SFP是字节数组:

代码语言:javascript
复制
byte[] SFP = new byte[7] { 0, 1, 2, 3, 4, 5, 6 };

还有其他变量:

代码语言:javascript
复制
List<byte[]> lst_SFP = new List<byte[]>();

现在我的问题是:如何将SFP_vars的值赋给lst_SFP?lst_SFP = SFP_vars.ToList()不起作用。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-12 18:29:22

您还需要将内部枚举数转换为byte数组:

代码语言:javascript
复制
lst_SFP = SFP_vars.Select(x => x.ToArray()).ToList();
票数 1
EN

Stack Overflow用户

发布于 2013-04-12 18:28:58

代码语言:javascript
复制
lst_SFP = SFP_vars.Select(bytePermutation => bytePermutation.ToArray()).ToList()

基本上,您希望列表中的内容是一个字节数组,所以Select语句会处理它,给您一个IEnumerable<byte[]>

然后我们对其执行ToList,使其成为一个列表。

bytePermutation可以被命名为任何名称,我只是这样命名的,这样你就可以对发生了什么有一个概念。

票数 1
EN

Stack Overflow用户

发布于 2013-04-12 18:31:55

SFP_vars看起来更像是IEnumerable<IEnumerable<byte>>而不是IEnumerable<byte[]>

这意味着您首先需要使用ToArray()方法将IEnumerable<byte>对象转换为byte[]。然后可以将它们添加到列表中。

尽管它等同于相同的东西,但您可以替换为下面的LINQ查询:

代码语言:javascript
复制
List<byte[]> lst_SFP = SFP_vars.Select(ie => ie.ToArray()).ToList();

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15968978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档