Есть ли какие-либо последствия для производительности при реализации ссылочно-прозрачных методов как статических функций только для чтения, а не просто как методов? Лично я нахожу версии Func более читабельными, но, возможно, традиционный способ более эффективен.
Этот:
static readonly Func<DateTime, DateTime> TruncateDay =
date => date.AddHours(-date.Hour)
.AddMinutes(-date.Minute)
.AddSeconds(-date.Second)
.AddMilliseconds(-date.Millisecond);
static readonly Func<DateTime, DateTime> TruncateMonth =
date => TruncateDay(date).AddDays(1 - date.Day);
static readonly Func<DateTime, DateTime> TruncateYear =
date => TruncateMonth(date).AddMonths(1 - date.Month);
static readonly Func<DateTime, int> QuarterSwitch =
date => Switch(date.Month % 3, 0,
Case(1, 3),
Case(2, 4),
Case(0, 5));
По сравнению с этим:
static DateTime TruncateDay (DateTime date)
{
return date.AddHours(-date.Hour)
.AddMinutes(-date.Minute)
.AddSeconds(-date.Second)
.AddMilliseconds(-date.Millisecond);
}
static DateTime TruncateMonth (DateTime date)
{
return TruncateDay(date).AddDays(1 - date.Day);
}
static DateTime TruncateYear (DateTime date)
{
return TruncateMonth(date).AddMonths(1 - date.Month);
}
static int QuarterSwitch (DateTime date)
{
return Switch(date.Month % 3, 0,
Case(1, 3),
Case(2, 4),
Case(0, 5));
}
Как они представлены внутри? Во что транслирует каждый из них компилятор?
TruncateDay
уже существует как свойствоDate
для значенияDateTime
и примерно в 5 раз быстрее, чем ваша реализация. См. msdn.microsoft.com/en-us/library/system. .datetime.date.aspx - person Jeffrey Sax   schedule 26.01.2012