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

Gre*_*reg 12 c# arrays enumerator

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

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

IEnumerator<byte> enumerator = updDnsPacket.GetEnumerator();
Run Code Online (Sandbox Code Playgroud)

Bri*_*sio 22

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

var list = new List<byte>();
while(enumerator.MoveNext())
  list.Add(enumerator.Current);
var array = list.ToArray();
Run Code Online (Sandbox Code Playgroud)

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

public static class EnumeratorExtensions
{
    public static IEnumerable<T> ToEnumerable<T>(this IEnumerator<T> enumerator)
    {
      while(enumerator.MoveNext())
          yield return enumerator.Current;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,你可以得到数组:

var array = enumerator.ToEnumerable().ToArray();
Run Code Online (Sandbox Code Playgroud)

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


dtb*_*dtb 8

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

IEnumerable<byte> udpDnsPacket = /*...*/;

byte[] result = udpDnsPacket.ToArray();
Run Code Online (Sandbox Code Playgroud)

  • 是仅仅是我还是问题显然不是关于IEnumerable而是关于IEnumerator? (8认同)
  • 一定要爱LINQ! (2认同)
  • @Greg:是的.你需要添加`using System.Linq;`以使`Enumerable`类可见. (2认同)