/ / Дата, час? Метод розширення AddDays - c #, дата-час, методи розширення

Дата, час? Метод розширення AddDays - c #, datetime, методи розширення

Я хочу написати метод розширення, який додає один день до 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;