当前位置:  开发笔记 > 编程语言 > 正文

C# - 如何从枚举器创建数组

如何解决《C#-如何从枚举器创建数组》经验,为你挑选了2个好方法。

在C#中,从对象的枚举器创建对象数组的最优雅方法是什么?例如,在这种情况下,我有一个可以返回字节的枚举器,所以我想将其转换为byte [].

编辑:创建枚举器的代码:

IEnumerator enumerator = updDnsPacket.GetEnumerator();

Brian Genisi.. 22

好吧,假设您有一个实际的枚举器(IEnumerator),您可以使用while循环:

var list = new List();
while(enumerator.MoveNext())
  list.Add(enumerator.Current);
var array = list.ToArray();

在现实中,我更愿意转IEnumerator来的IEnumerable:

public static class EnumeratorExtensions
{
    public static IEnumerable ToEnumerable(this IEnumerator enumerator)
    {
      while(enumerator.MoveNext())
          yield return enumerator.Current;
    }
}

然后,你可以得到数组:

var array = enumerator.ToEnumerable().ToArray();

当然,所有这些都假设您使用的是.Net 3.5或更高版本.



1> Brian Genisi..:

好吧,假设您有一个实际的枚举器(IEnumerator),您可以使用while循环:

var list = new List();
while(enumerator.MoveNext())
  list.Add(enumerator.Current);
var array = list.ToArray();

在现实中,我更愿意转IEnumerator来的IEnumerable:

public static class EnumeratorExtensions
{
    public static IEnumerable ToEnumerable(this IEnumerator enumerator)
    {
      while(enumerator.MoveNext())
          yield return enumerator.Current;
    }
}

然后,你可以得到数组:

var array = enumerator.ToEnumerable().ToArray();

当然,所有这些都假设您使用的是.Net 3.5或更高版本.



2> dtb..:

假设您有一个IEnumerable ,您可以使用Enumerable.ToArray扩展方法:

IEnumerable udpDnsPacket = /*...*/;

byte[] result = udpDnsPacket.ToArray();


是仅仅是我还是问题显然不是关于IEnumerable而是关于IEnumerator?
一定要爱LINQ!
@Greg:是的.你需要添加`using System.Linq;`以使`Enumerable`类可见.
推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有