4 回答

TA贡献1909条经验 获得超7个赞
WriteLine()始终在文本后添加新行。所以在你的情况下应该是
myF.Write(NamesList.ElementAt(i));
myF.Write(" ");
myF.WriteLine(Grades.ElementAt(i));

TA贡献1801条经验 获得超16个赞
您始终可以使用字符串插值对齐来对齐文本。
为了遵循一些评论,我还敦促您建立一个持有这些价值观的类。
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
public int Grade { get; set; }
}
这是使用字符串插值对齐的代码
var students = new List<Student>
{
new Student {Name = "John", Age = 10, Grade = 98},
new Student {Name = "Alon", Age = 10, Grade = 100}
};
var minGrade = students.Min(s => s.Grade);
var maxGrade = students.Max(s => s.Grade);
using (var myF = new System.IO.StreamWriter(@"C:\Users\axcel\textfolder\myFile.txt", true))
{
myF.WriteLine($"{"Name",-15}{"Age",-10}{"Grade",5}");
myF.WriteLine("==============================");
foreach (var student in students)
{
myF.WriteLine($"{student.Name,-15}{student.Age,-10}{student.Grade,5}");
}
}
这将产生以下结果:
Name Age Grade
==============================
John 10 98
Alon 10 100
正数右对齐,负数左对齐
您可以在 Microsoft Docs的字符串插值页面上阅读有关它的更多信息

TA贡献1829条经验 获得超13个赞
var students = new List<(string name, int age, int grade)>()
{
("John", 21, 98),
("Alon", 45, 100)
};
students.Add(("Alice", 35, 99));
using (var writer = new StreamWriter("myFile.txt"))
{
writer.WriteLine(string.Join("\t", "Name", "Age", "Grade"));
foreach(var student in students)
{
writer.WriteLine(string.Join("\t", student.name, student.age, student.grade));
}
}
正如一些评论所建议的那样,您可以使用学生类来对姓名、年龄和年级进行分组。在这个例子中,我使用了一个值元组。
您可以看到它如何提高代码的可读性,并且您可以专注于您实际尝试解决的问题。您可以将写入操作简化为简单易读的表达式——这意味着您不太可能犯错误,例如混淆 Write 和 WriteLine。

TA贡献1876条经验 获得超6个赞
要解决您遇到的问题,您可以使用: myF.WriteLine(NamesList.ElementAt(i) + " " + Grades.ElementAt(i));
但是,您提供的代码将受益于注释中所述的修改(创建一个类,使用 FileHelpers 等)
- 4 回答
- 0 关注
- 350 浏览
添加回答
举报