如何检查名称是否以带有字符的肯定字母开头?

时间:2017-11-10 07:00:39

标签: c# sorting char

我有一个名字列表,我希望显示整个字母和每个字母的正确名称。像这样:

  

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。我试过“信”甚至所有单个字母。

2 个答案:

答案 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);
    }
}