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;
}
为什么不使用字典。字典使用其他对象作为键来检索它们的值。
在你的情况下,你可以把所有的生日都映射到他们的名字上,比如:
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));
}
}
}
}