首页 > 解决方案 > 使用 foreach 仅显示列表中的某些元素

问题描述

我对 c# 很陌生,我一直在尝试在线搜索答案/解决方案,但没有找到。

基本上,我在 C# 中读取了一个 csv 文件,用逗号 (',') 分隔行并将三组数据存储在一个表中。例如,csv文件的一行是:name, date1, date2

您可以看到下面的代码(还创建了一个 RHM 类):

List<RHM> data1 = new List<RHM>();

List<string> lines = File.ReadAllLines(filePath).ToList();
lines.RemoveAt(0);
foreach (var line in lines)
{
    string[] entries = line.Split(',');
    RHM nRHM = new RMH 
    {
        Name = entries[0],
        Date1 = entries[1],
        Date2 = entries[2]
    };

    data1.Add(nRMH);

}

现在我已经成功导入它,我只想在名称列表中显示例如第 5 行。到目前为止,我只设法使用 foreach 循环显示所有名称:

foreach (var RMH in data1)
{
    Console.WriteLine(RMH.Name);
}

我试过使用 .skip ,但这只会从列表中删除一个元素。我需要一种显示方式,例如第 23、34、15 行。

标签: c#

解决方案


您可以通过索引访问列表中的对象。因此,如果您想要第 23 个元素,您只需执行list[22]. 索引0基于意味着list[0]将是列表中的第一个元素。这是一个如何访问和使用列表中的对象的示例:

RHM 23rdItemInList = data1[22];
Console.WriteLine($"Name of item in list on index 22 is: {23rdItemInList.Name}");

请注意,如果您从列表中删除一个项目,索引将不对应于文件中的实际行。如果重要,我建议将行号存储在您的对象中。

List<RHM> data1 = new List<RHM>();

List<string> lines = File.ReadAllLines(filePath).ToList();
lines.RemoveAt(0);
int lineNumber = 1; //Here probably should be 2 because you skipping the first line in file with lines.RemoveAt(0);
foreach (var line in lines)
{
    string[] entries = line.Split(',');
    RHM nRHM = new RMH 
    {
        Line = lineNumber,
        Name = entries[0],
        Date1 = entries[1],
        Date2 = entries[2]
    };

    data1.Add(nRMH);
    lineNumber++;
}

现在您可以按行号获取对象,如下所示:

var 23rdLineData = data1.FirstOrDefault(x=>x.Line == 23);

FirstOrDefault如果列表中没有 Line == 23 的记录,将返回 null 对象。在使用之前检查是否找到对象

if(23rdLineData != null)
   Console.WriteLine($"Name on line 23 is {23rdLineData.Name}");
else
   Console.WriteLine("There is no data on line 23");

推荐阅读