繁体   English   中英

C# 切换大小写强制

[英]C# switch case forcing

嗨,我正在制作一个 C# windows 窗体应用程序,我切换了我所有队友的生日以计算他们的生日年龄,但是我想添加一个功能,如果今天是他们的生日,则会出现一条消息。 因此,我需要在开关的 EACH CASE 中添加一些内容,然后我将添加一个验证,例如今天的日期是否等于 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;
}   

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM