我对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行。
答案 0 :(得分:2)
您可以按索引访问列表中的对象。因此,如果要使用第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);
如果列表中没有Line == 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");
答案 1 :(得分:0)
有多种方法可以实现目标。
例如,您可以使用LINQ通过任何对象字段过滤列表,如下所示:
RMH niceRMH;
int index = 23;
data1.TryGetValue(index, out niceRMH);
要按行号过滤,可以使用TryGetValue例如:
cmd /c rmdir...