所以有一个TimeUnit
枚举看起来像这样
public enum TimeUnit
{
Days,
Weeks,
Months,
Years,
Hours,
Minutes,
Seconds,
Milliseconds,
Microseconds
}
我有一个像这样的静态方法AddPeriod
public static DateTime AddPeriod(DateTime dateTime,Period period)
{
switch (period.Units)
{
case TimeUnit.Days:
{
return dateTime.AddDays(period.Length);
}
case TimeUnit.Months:
{
return dateTime.AddMonths(period.Length);
}
case TimeUnit.Years:
{
return dateTime.AddYears(period.Length);
}
// every other TimeUnit enum with a similar switch statement
default:
{
Log.Error("TimeUnit not implemented: " + period.Units);
return dateTime;
}
}
}
但是当我实现这个时,我觉得必须有一个更好的方法来简单地添加相应的TimeUnit而不是一个庞大的switch语句....这看起来像一个合理的方法还是我错过了一些更明确或惯用的东西?
答案 0 :(得分:1)
令人讨厌的方法之一是使用反射:
var method = dateTime.GetType()
.GetMethods(BindingFlags.Public | BindingFlags.Instance)
.SingleOrDefault(mi => mi.Name.EndsWith(period.Units.ToString();
method.Invoke(dateTime, period.Length);
但是讨厌,丑陋,并且可以引入错误。它不适合实际使用:-)考虑使用TimeSpan
,如评论中所述。