C# 使用foreach仅显示列表中的某些元素

C# 使用foreach仅显示列表中的某些元素,c#,C#,我对c#还很陌生,我一直试图在网上寻找答案/解决方案,但没有 基本上,我在C#中读取了一个csv文件,用逗号(“,”)分隔行,并将三组数据存储在一个表中。例如,csv文件的一行类似于:name、date1、date2 您可以看到下面的代码(还创建了一个RHM类): 我尝试使用.skip,但这只会从列表中删除一个元素。我需要一种方法来显示例如第23、34、15行。您可以通过索引访问列表中的对象。因此,如果您想要第23个元素,只需执行list[22]。索引是基于0的,这意味着list[0]将是列表中

我对c#还很陌生,我一直试图在网上寻找答案/解决方案,但没有

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

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


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

您可以通过索引访问列表中的对象。因此,如果您想要第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++;
}
如果列表中没有第==23行的记录,
FirstOrDefault
将返回null对象。 使用前检查是否找到对象

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

您可以通过索引访问列表中的对象。因此,如果您想要第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++;
}
如果列表中没有第==23行的记录,
FirstOrDefault
将返回null对象。 使用前检查是否找到对象

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

有多种方法可以实现你的目标

例如,您可以使用LINQ按任何对象字段过滤列表,如下所示:

List<RMH> results = data1.Where(d => d.Name == "HPBaxxter");

有多种方法可以实现你的目标

例如,您可以使用LINQ按任何对象字段过滤列表,如下所示:

List<RMH> results = data1.Where(d => d.Name == "HPBaxxter");

您可以使用变量data1,因为它是数组data1[4]是添加到该列表的第五个元素(RHM),因此data1[4]。名称您可以使用变量data1,因为它是数组data1[4]是添加到该列表的第五个元素(RHM),因此data1[4]。名称我以前尝试过,但出于某种原因,它会输出名称空间名称。我也尝试过在foreach循环中这样做,但这会输出第一个字符。她用示例更新了我的答案,并添加了一些注释。她应该检查项索引是否存在,以避免出现异常。我以前也尝试过,但出于某种原因,它会输出名称空间名称。我也尝试过在foreach循环中这样做,但输出的第一个字符用示例更新了我的答案并添加了一些注释她应该检查项目索引是否存在以避免异常
TryGetValue
is method of
Dictionary
而不是
List
TryGetValueis method of
Dictionary
nota
列表