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 № 1Nie 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;