/ / DateTime? Metoda rozszerzenia AddDays - c #, data / godzina, metody rozszerzeń

DateTime? Metoda rozszerzenia AddDays - c #, datetime, extension-methods

Chcę napisać metodę rozszerzenia, która dodaje jeden dzień do Nullable DateTime, ale modyfikuje samą datę.

Chcę użyć tego w następujący sposób:

someDate.AddOneDay();

To bezpośrednio zmienia wartość someDate.

Kod, który początkowo napisałem, to:

public static DateTime? AddOneDay(this DateTime? date)
{
if (date.HasValue)
{
date.Value = date.Value.AddDays(1);
}

return null;
}

ale to nie działa, ponieważ zmieniono odwołanie, nazywając go w ten sposób nie zmieni wartości someDate.

Czy istnieje sposób, aby to osiągnąć i uniknąć kodu takiego jak:

someDate = someDate.AddOneDay();

Zastanawiałem się również nad jakimś ustawieniem właściwości DateTime, ale nie mają one żadnych…

public int Day { get; }
public int Month { get; }
public int Year { get; }

Odpowiedzi:

6 dla odpowiedzi № 1

Nie możesz DateTime jest niezmienny i tak powinno pozostać.

Po prostu zrób:

someDate = someDate.AddOneDay();

A jeśli chcesz być bardziej szczegółowy, możesz zmienić nazwę swojej funkcji na:

DateTime? someDate = someDate.AddOneDayOrDefault();

3 dla odpowiedzi № 2

stara szkoła %)

public static void AddOneDay(ref DateTime date)
{
if (date != null) date = date.AddDays(1);
}

stosowanie:

DateTime date = DateTime.Now;
AddOneDay(ref date);

UPD

wersja liniowa metody:

public static void AddOneDay(ref DateTime date) { date = date.AddDays(1); }

0 dla odpowiedzi № 3

C # obsługuje podobną funkcję, nawet dla zmiennych, które są używane += na wartości zerowalne:

DateTime? date = GetDate();
var oneDay = TimeSpan.FromDays(1);
date += oneDay;