如何使用LINQ拆分字符串并获取指定的标记

Aam*_*mir 3 c# linq-to-objects

我有一个制表符分隔的字符串,格式如下:

string line = "D\t892270\t88418\t6\t2452927\t-99999\t-99999\t12";
Run Code Online (Sandbox Code Playgroud)

我想要的是获取通过指定的令牌的值indexToGet.

我写了以下LINQ查询来做这个,我相信可以改进很多,但目前我无法这样做.有人可以为我改进这个LINQ查询吗?

int indexToGet = 7;
var val =
    (from str in line.Split('\t')
    select str).ToArray().GetValue(indexToGet).ToString();
Run Code Online (Sandbox Code Playgroud)

Pet*_*old 6

为什么需要使用LINQ?以下代码在没有LINQ开销的情况下解决了它:

var val = line.Split('\t')[indexToGet];
Run Code Online (Sandbox Code Playgroud)

澄清:使用您使用的查询理解语法,无法指定您只需要在给定位置的元素.因此,使用LINQ,您将不得不依赖于ElementAt扩展方法.所以减少的第一次迭代你可以替换.ToArray().GetValue(indexToGet).ToString();并得到这个:

var val =
    (from str in line.Split('\t')
    select str).ElementAt(indexToGet);
Run Code Online (Sandbox Code Playgroud)

此外,由于查询部分除了花哨之外没有任何价值(并且使代码难以阅读),您可以减少到:

var val = line.Split('\t').ElementAt(indexToGet);
Run Code Online (Sandbox Code Playgroud)

接下来,因为ElementAt在这种情况下索引到一个数组,直接使用索引器会更快:

var val = line.Split('\t')[indexToGet];
Run Code Online (Sandbox Code Playgroud)