将List和Array作为IEnumerable的参数传递

时间:2012-11-08 20:57:56

标签: c# .net generics resharper ienumerable

我想创建一个可以接受List<byte>和字节数组作为参数的方法(如Resharper建议的那样):

public static UInt16 GetSourceAddress(IEnumerable<byte> packet)
{
    return BitConverter.ToUInt16(new[] {packet[4], packet[5]}, 0);
}

Bute我得到了以下编译错误:

Cannot apply indexing with [] to an expression of type 'System.Collections.Generic.IEnumerable<byte>'

我知道我可以继续使用List和byte []进行两次重载,但这个问题表明了什么?如何解决?

2 个答案:

答案 0 :(得分:6)

如果您想要随机访问,请改用IList<T>

public static UInt16 GetSourceAddress(IList<byte> packet)

List<byte>byte[]都实现IList<byte>,并且它有一个索引器。

答案 1 :(得分:2)

试试这个

public static UInt16 GetSourceAddress(IEnumerable<byte> packet){  

 return BitConverter.ToUInt16(new[] {packet.ElementAt(4), packet.ElementAt(5)}, 0);
}