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!");
}
}
你好,我正在制作一个 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!");
}
}