C#开关箱强制

本文关键字:开关箱 | 更新日期: 2023-09-27 18:01:11

嗨,我正在制作一个C#窗体应用程序,我与所有队友的生日进行了切换,以计算他们的生日年龄,但我想添加一个功能,即如果今天是他们的生日,则会显示一条消息。因此,我需要一些东西进入交换机的每个案例,在那里我会添加一个验证,比如如果今天的日期等于bday,那么消息显示"它的名字1生日,今天!">

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;
}   

C#开关箱强制

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

在你的情况下,你可以把所有的生日都映射到他们的名字上,比如:

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!");
    }
}

根据您在代码片段中提供的内容,您可以在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是一个只能归属于当前"名称"的单个值。

实现您所希望的功能的一种方法是使用类来表示名称,如下所示:

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