我被要求通过扩展方法扩展 DateTime 类型。然后我需要创建一个方法来检查添加的月份值是否是我的生日,如果不是,它会告诉我离我的生日还有多少个月。我尝试为 DateTime 扩展创建以下类,其中包含扩展方法。
我只是迷失了该方法中的生日月份计算
应该是这样的:
public static class MyDateTimeExtension
{
public static DateTime Month(this DateTime DiffDT)
{
DateTime BirthdayMonth;
DateTime CurrentMonth;
return DiffDT = BirthdayMonth - CurrentMonth;
}
}
Run Code Online (Sandbox Code Playgroud)
或类似的东西
return DiffDT.AddMonths = BirthdayMonth.AddMonths - CurrentMonth.AddMonths;
Run Code Online (Sandbox Code Playgroud)
但当然这段代码无法编译。创建扩展方法后,我应该使用新的 DateTime 变量从主类调用该方法
DateTime DT;
Console.WriteLine(DT.Month());
Run Code Online (Sandbox Code Playgroud)
希望这有助于理解
小智 10
为了实现这个逻辑,我让扩展方法检查月份是否在今年晚些时候,如果是,则将 12 添加到环绕逻辑的差异中。下面是扩展方法:
public static int DateTimeMonth(this DateTime dt, DateTime birthday)
{
int difference = birthday.Month - dt.Month;
if (difference < 0)
{
difference += 12;
}
return difference;
}
Run Code Online (Sandbox Code Playgroud)
这是 main 中使用此方法的代码:
DateTime today = DateTime.Now;
DateTime birthday = new DateTime(1985, 03, 22);
int monthDifference = today.DateTimeMonth(birthday);
if (monthDifference == 0)
{
Console.WriteLine("It is your birthday month this month!");
}
else
{
Console.WriteLine("It will be your birthday in " + monthDifference + " months.");
}
Run Code Online (Sandbox Code Playgroud)
扩展方法返回一个可以在调用者中使用的整数,但如果您只想要表示在 WriteLines 中打印内容的字符串,您可以让扩展方法改为执行此逻辑并返回该字符串。