C# 开关大小写强制

C# switch case forcing

你好,我正在制作一个 C# windows 表单应用程序,我对所有队友的生日进行了切换,以计算他们的生日年龄,但是我想添加一个功能,如果今天是他们的生日出现一条消息。 因此,我需要一些东西进入开关的每个 CASE,在那里我将添加一个验证,比如如果今天的日期等于 bday,那么 messageshow "its name 1 birthday, today!"

switch (name)
{
    case "name 1":
        bday = DateTime.Parse("11.11.1988");
        break;
    case "name 2":
        bday = DateTime.Parse("11.12.1988");
        break;
    case "name 3":
        bday = DateTime.Parse("03.12.1987");  
        break;
}   

根据您在代码段中提供的内容,您可以在 case 语句之外进行此类检查。示例:

public void WhateverYourMethodIs()
{
    switch (name)
    {
        case "name 1":
            bday = DateTime.Parse("11.11.1988");
            break;
        case "name 2":
            bday = DateTime.Parse("11.12.1988");
            break;
        case "name 3":
            bday = DateTime.Parse("03.12.1987");  
            break;
    }   

    if (this.IsBirthday(bday))
    {
        // do whatever you want for when it's the name's birthday.
    }
}

public bool IsBirthday(DateTime bday)
{
    if (bday.Day == DateTime.Now.Day && bday.Month == DateTime.Now.Month)
        return true;

    return false;
}

请注意,以上不会考虑闰日生日。

根据您的意见,您似乎希望评估所有名字的生日,而不管切换。这不适用于您当前的方法。 bday是一个单一的值,只能归于当前的"name"。

一个 方法来完成你所希望的是使用 class 来表示一个名字所以:

public class User
{
    public string Name { get; set; }
    public DateTime Birthday { get; set; }

    public bool IsBirthday
    {
        get
        {
            if (Birthday.Day == DateTime.Now.Day && Birthday.Month == DateTime.Now.Month)
                return true;

            return false;
        }        
    }
}

public class SomeClass
{    

    private List<User> Users = new List<User>();
    public void PopulateNames()
    {
        Users.Add(new User()
        {
            Name = "name 1",
            Birthday = DateTime.Parse("11.11.1988")
        };

        Users.Add(new User()
        {
            Name = "name 2",
            Birthday = DateTime.Parse("11.12.1988")
        };
        // etc
    }

    public void DoSomethingOnUsersWithABirthday()
    {
        foreach (User user in Users)
        {
            if (user.IsBirthday)
            {
                // do something for their birthday.
                Console.WriteLine(string.format("It's {0}'s birthday!", user.Name));
            }
        }
    }
}

你为什么不使用字典。 字典使用其他对象作为键来检索它们的值。

在您的情况下,您可以将所有生日映射到他们的名字,例如:

Dictionary<string, DateTime> birthdays = new Dictionary<string, DateTime>;

//Add values like this 
birthdays.Add("name 1", DateTime.Parse("11.11.1988"));
birthdays.Add("name 2", DateTime.Parse("11.12.1988"));
...

//Then you could loop through all the entries
foreach(KeyValuePair<string, DateTime> entry in birthdays)
{
    if(entry.Value.Day == DateTime.Now.Day && entry.Value.Month == DateTime.Now.Month)
    {
        Console.WriteLine(entry.Key + " has birthday!");
    }
}