@jeff
, по моему скромному мнению, Ваш кажется немногим долго. Однако это действительно кажется немного более устойчивым с поддержкой "вчера" и "годы". Но по моему опыту когда это используется, человек, скорее всего, просмотрит содержание за первые 30 дней. Это - только действительно жесткие люди, которые приезжают после этого. Так именно поэтому я обычно выбираю сохранять это коротким и простым.
Это - метод, который я в настоящее время использую на одном из моих веб-сайтов. Это только возвращает относительный день, час, время. И затем пользователь должен хлопнуть на "назад" по выводу.
public static string ToLongString(this TimeSpan time)
{
string output = String.Empty;
if (time.Days > 0)
output += time.Days + " days ";
if ((time.Days == 0 || time.Days == 1) && time.Hours > 0)
output += time.Hours + " hr ";
if (time.Days == 0 && time.Minutes > 0)
output += time.Minutes + " min ";
if (output.Length == 0)
output += time.Seconds + " sec";
return output.Trim();
}
Если вам нужно выполнить действие, когда элемент управления входит в метод, вам следует взглянуть на аспектно-ориентированное программирование и такие фреймворки, как PostSharp . Атрибуты не предназначены для выполнения чего-либо сами по себе. Это просто набор данных (или метаданных, если хотите), прикрепленных к материалам в сборках IL, которые можно запросить во время выполнения.
Атрибуты разрешают только декорирование типов и членов, но сам атрибут не может получить доступ к декорированному объекту. Вам нужно будет использовать параметры конструктора атрибута для передачи любых данных, которые вам необходимы для работы в атрибуте.
Если вы хотите использовать атрибуты для автоматического изменения поведения их целевых объектов, вам нужно будет посмотреть на Решения АОП, такие как PostSharp .
Атрибут никогда не создается, поэтому его конструктор никогда не вызывается. Атрибут остается как метаданные, пока вы не воспользуетесь отражением для его получения. Как уже упоминалось ранее, вам нужен инструмент аспектно-ориентированного программирования. PostSharp работает, изменяя сборку на этапе после сборки. Если вы используете Castle Windsor или Unity Inversion of Control Containers, они оба также предлагают возможности АОП.