我正在使用此CSV阅读器尝试从我的CSV文件中打印出姓名,姓氏和SSN:
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 }
代码的哪一部分正在制作,所以它被打印出来而不是只打印出记录?
答案 0 :(得分:1)
以这种方式打印时:
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.或者,如果您投射到已定义的类型而不是匿名类型,则可以覆盖对象的ToString
,然后问题中的代码将起作用