列名(LINQ CSV阅读器)
问题描述:
我使用这个CSV阅读器试图从我的CSV文件打印出来姓名,姓氏和SSN:列名(LINQ CSV阅读器)
static void Main(string[] args)
{
var query = File.ReadLines(@"C:\CSV\ToAdd.csv")
.SelectMany(line => line.Split(';'))
.Where(csvLine => !String.IsNullOrWhiteSpace(csvLine))
.Select(csvLine => new { data = csvLine.Split(',') })
.Select(s => new
{
Name = s.data[0],
Lastname = s.data[1],
SSN = s.data[2]
});
foreach (var item in query)
{
Console.WriteLine(item);
}
Console.ReadKey();
}
到目前为止,我有有些成功的,但问题是它使打印出的列的名称,以及:
{ Name = Hej, Lastname = Hoj, SSN= 950505-1432 }
{ Name = Huj, Lastname = Hij, SSN= 940304-1332 }
代码的哪些部分正在它,所以它被打印出来一样,而不是打印出来只记录?
答
打印时这样说:
foreach (var item in query)
{
Console.WriteLine(item);
}
它使用的.Net的编译器生成匿名类型实现的ToString()
。它的实现是以属性名称+值的格式打印数据。
当你想要做的反而是给进行打印时的特定格式:
-
使用C#6字符串插值(这只是语法为
string.Format
糖 ),你可以做这样的:foreach (var item in query) { Console.WriteLine($"{item.Name} {item.Lastname}, {item.SSN}"); }
-
使用
Console.WriteLine
的另一个过载:foreach (var item in data) { Console.WriteLine("{0} {1}, {2}",item.Name, item.Lastname, item.SSN); }
3.Or如果你投射到一个定义的类型,而不是匿名类型可以覆盖对象的
ToString
,然后从你的问题代码将工作
我建议更新问题+标题,以更好地反映了这个问题 - 当打印这个linq生成的匿名类型对象时,它不是您所期望的格式 –