LINQ获取子数组

时间:2012-11-05 08:49:59

标签: c# linq substring

我有一个byte[],我想提取一部分数组并将其转换为字符串。我想使用LINQ并在一行中完成。这是我能找到的最好的,但它让我失望。

String id = new String(payload.Skip(60).Take(92-60+1).ToString());

将有效负载[60]提取到有效负载[92]并将其转换为字符串。有没有更好的办法?我仍然在使用这种语法时遇到一些错误..

5 个答案:

答案 0 :(得分:1)

不需要linq。 ASCIIEncoding.GetString

var str = Encoding.ASCII.GetString(payload, 60, 92-60+1);

答案 1 :(得分:0)

您可以尝试以下内容:

string.Concat((object[])payload.Skip(60).Take(92-60+1).Cast<object>().ToArray())

答案 2 :(得分:0)

试试这个。

String id =Encoding.ASCII.GetString(payload.ToArray().Skip(60).Take(92-60+1).ToArray())

答案 3 :(得分:0)

假设使用UTF8编码的字符串,您可以像这样使用linq:

Encoding.UTF8.GetString(bytes.Skip(60).Take(32).ToArray());

这是一个更简单有效的解决方案:

Encoding.UTF8.GetString(bytes, 60, 32);

这样可以避免复制数组的部分,使用秒表进行快速检查会显示它快20倍。

答案 4 :(得分:0)

首先你应该使用一些编码将你的字节数组转换为字符串(在我看来,这是一种安全的方式,比较字节数组到字符串的其他方法),这种编码取决于你的字节数组格式,你知道的更好。

其次,因为你有一个数组,所以最好使用像Array.Copy这样的内置数组函数,因为这比linq更快,你也不需要遍历数组的92个元素,你只需要遍历33个元素。

var secondArray = new byte[92-60+1];
Array.Copy(payLoad, 60, secondArray, 0, 92-60+1);
UTF8Encoding encoding = new UTF8Encoding();
string result = encodin.GetString(secondArray);