I'm new to C#. I was going through some code written by someone who worked on my project earlier when I came across this:
if (olderTime.happenedWhen.Ticks > happenedWhen.Ticks) { thisIsTrulyNew = false; }
Both olderTime.happenedWhen
and happenedWhen
are of type DateTime
.
Is this a more accurate way of comparing DateTime?
I know that Ticks represents 100 nano-second intervals from 00:00, January 1, 0001. But why do this sort of a comparison when I thought we could do:
if (olderTime.happenedWhen > happenedWhen){ thisIsTrulyNew = false }
Does the ticks comparison achieve something that the normal comparison wouldn't?
The ' |= ' symbol is the bitwise OR assignment operator.
In mathematics, the tilde often represents approximation, especially when used in duplicate, and is sometimes called the "equivalency sign." In regular expressions, the tilde is used as an operator in pattern matching, and in C programming, it is used as a bitwise operator representing a unary negation (i.e., "bitwise ...
C operators are one of the features in C which has symbols that can be used to perform mathematical, relational, bitwise, conditional, or logical manipulations. The C programming language has a lot of built-in operators to perform various tasks as per the need of the program.
In C/C++, the # sign marks preprocessor directives. If you're not familiar with the preprocessor, it works as part of the compilation process, handling includes, macros, and more.
Is this a more accurate way of comparing DateTime?
Not in the slightest. In fact, that is how the >
operator is implemented internally.
From the .NET Reference source:
public static bool operator >(DateTime t1, DateTime t2) { return t1.InternalTicks > t2.InternalTicks; }
Someone might have thought they were being clever by skipping the one line of internal code and going straight to the Ticks
property. In reality, the getter for Ticks
returns InternalTicks
, so unless it is optimized by the compiler, using the Ticks
property adds two calls in order to save one call (neither of which would change the performance significantly).
The implementation of the operator >
for DateTime
compares the ticks too, as you can see from this disassembled code (mscorlib.dll, System.DateTime class):
[__DynamicallyInvokable] public long Ticks { [__DynamicallyInvokable, TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] get { return this.InternalTicks; } } [__DynamicallyInvokable, TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] public static bool operator >(DateTime t1, DateTime t2) { return t1.InternalTicks > t2.InternalTicks; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With