Я хочу написати метод розширення, який додає один день до Nullable DateTime, але змінює саму дату.
Я хочу використовувати його наступним чином:
someDate.AddOneDay();
Це безпосередньо змінює значення someDate.
Я спочатку писав код:
public static DateTime? AddOneDay(this DateTime? date)
{
if (date.HasValue)
{
date.Value = date.Value.AddDays(1);
}
return null;
}
але це не працює, оскільки посилання змінено, що називає його таким чином не змінить значення someDate.
Чи є спосіб досягти цього і уникнути коду, такого як:
someDate = someDate.AddOneDay();
Також я думав про якийсь установщик властивостей DateTime, але вони не мають жодного ..
public int Day { get; }
public int Month { get; }
public int Year { get; }
Відповіді:
6 за відповідь № 1Ви не можете "DateTime" незмінний і повинен залишатися таким.
Просто:
someDate = someDate.AddOneDay();
І якщо ви хочете бути більш конкретним, ви можете перейменувати свою функцію на:
DateTime? someDate = someDate.AddOneDayOrDefault();
3 для відповіді № 2
стара школа %)
public static void AddOneDay(ref DateTime date)
{
if (date != null) date = date.AddDays(1);
}
використання:
DateTime date = DateTime.Now;
AddOneDay(ref date);
UPD
однорядкова версія методу:
public static void AddOneDay(ref DateTime date) { date = date.AddDays(1); }
0 для відповіді № 3
C # підтримує подібну функцію, навіть для змінних значень, що є використанням +=
на нульові значення:
DateTime? date = GetDate();
var oneDay = TimeSpan.FromDays(1);
date += oneDay;