dtb is right about DateTime
being immutable. Think of it this way: a DateTime
is a value type, which puts it in the same category as int
or double
. Instances of these structures cannot be modified; they can only be evaluated and copied.
Consider this code:
int i = 4;
i + 2; // does not compile, but what if it did?
// would i become 6? clearly not --
// i + 2 expresses a NEW value, which can
// be copied somewhere
i = i + 2; // there we go -- that's better
This is analogous to:
DateTime d = DateTime.Now;
TimeSpan t = TimeSpan.FromDays(1.0);
d.Add(t); // compiles (because AddDays is a function),
// but is really the same as i + 2 above
d = d.Add(t); // that's better
By the way, one thing that might help make this clearer is realizing that the above line, d = d.Add(t)
, is the same as d = d + t
. And you wouldn't write d + t
on its own line, just like you wouldn't write i + 2
on its own line.