C# 从文件中获取行号。ReadAllLines()结果

C# 从文件中获取行号。ReadAllLines()结果,c#,file.readalllines,C#,File.readalllines,我正在使用file.ReadAllLines()读取文本文件,但我也可以使用file.ReadLines()。读取文件后,下一步是根据结果创建列表。在我的列表中,我需要获取文本文件中每个条目/行的行号。这能做到吗?怎么用?对于最终结果,我需要列表具有索引属性 以下是我得到的: var file = System.IO.File.ReadAllLines(path); var lineInfo = file.AsParallel().AsOrdered() .Select(line =&

我正在使用
file.ReadAllLines()
读取文本文件,但我也可以使用file.ReadLines()。读取文件后,下一步是根据结果创建列表。在我的列表中,我需要获取文本文件中每个条目/行的行号。这能做到吗?怎么用?对于最终结果,我需要列表具有索引属性

以下是我得到的:

var file = System.IO.File.ReadAllLines(path);

var lineInfo = file.AsParallel().AsOrdered()
    .Select(line => new
    {     
       // index =  **** I WANT THE INDEX/ROWNUMBER HERE ****
       lineType = line.Substring(0, 2),
       winID = line.Substring(11, 9),
       effectiveDate = line.Substring(0, 2) == EmployeeLine ? line.Substring(237, 8).ToDateTimeExact("yyyyMMdd") : null,
                    line
     })
     .ToList()
     .AsParallel();

Select
具有提供索引的

因此,您应该能够更改您的选择以包括它:

var lineInfo = file.AsParallel().AsOrdered()
    .Select((line, index) => new
    {     
         ....
    }
 })
 .ToList()
 .AsParallel();
然而,正如Servy在他的评论中指出的那样,如果您要加载整个文件,只是在加载后再次对其进行迭代,那么您也可以以流式方式处理每一行


不过,了解框架的新内容总是很有用的。

您可以尝试以下方法:

.Select((line,index) => new
{     
   Index = index
   lineType = line.Substring(0, 2),
   // the rest of your code.
 })

还有一个链接,在其中使用此链接

考虑到您只需要迭代结果,您应该改用
File.ReadLines
,这样您就可以对输入进行流式处理,而不是不必要地强制将其全部加载到内存中。避免将操作结果具体化到列表中也是值得的,除非您确实需要这样做。@Servy…我同意,谢谢您回答得很好…Daniel的排在第一位,所以我将他的标记为answer@BigDaddy没问题,伙计。我很高兴我们都帮助了你。