我有一个名字列表,我希望显示整个字母和每个字母的正确名称。像这样:
A
Auernach S.
乙
C
色度A.
d
Dori K。
电子
˚F
等等。
所以现在这是我的代码:
for (char letter = 'A'; letter <= 'Z'; letter++)
{
Console.WriteLine(letter);
Console.ReadKey();
foreach (var studentName in _student)
{
if (studentName.Lastname.StartsWith())
{
}
}
我不知道在StartsWith
之后的括号中写什么。由于char
循环中的for
。我试过“信”甚至所有单个字母。
答案 0 :(得分:1)
由于StartsWith
需要字符串,您可以在ToString
上致电letter
。
studentName.Lastname.StartsWith(letter.ToString())
另一种方法是阅读LastName
的第一个字符并将其与letter
进行比较:
studentName.LastName[0] == letter
为了让您的代码更安全,我建议您在foreach
进行过滤:
Func<Student, bool> lastNameHasValue =
student => !string.IsNullOrWhiteSpace(student?.LastName);
foreach (var studentName in _student.Where(lastNameHasValue))
作为旁注,上述foreach语句不是很易读。这会给读者带来一点混乱。
_student
的名称不是_students
?var studentName
恰恰意味着这一点。与此相比:
foreach(var student in students.Where(lastNameHasValue))
我敢打赌,后者更具可读性和意义。
答案 1 :(得分:0)
我建议你用第一封信预先计算你的学生团体:
var studentsByLetter = students.Where(x => !string.IsNullOrEmpty(x.Lastname))
.ToLookup(x => x.Lastname[0]);
然后只使用群组:
for (char letter = 'A'; letter <= 'Z'; letter++)
{
Console.WriteLine(letter);
Console.ReadKey();
foreach (var student in studentsByLetter[letter])
{
Console.WriteLine(student.Lastname);
}
}