Whilst playing around in an open source project, my attempt to ToString a DateTime object was thwarted by the compiler. When I jumped to the definition, I saw this:
public DateTime? timestamp;
Might someone please enlighten me on what this is called and why it might be useful?
The question mark after the variable is called Optional chaining (?.) in JavaScript. The optional chaining operator provides a way to simplify accessing values through connected objects when it's possible that a reference or function may be undefined or null.
With C# 8, the placing of a question mark character on ANY type will now be treated as an indicator of weather a variable may or may not be null, not in terms of preventing compilation outright, but in terms of how the compiler responds and warns about it.
The question mark ? in typescript is used in two ways: To mention that a particular variable is optional. To pre-check if a member variable is present for an object.
It's the null conditional operator. It basically means: "Evaluate the first operand; if that's null, stop, with a result of null.
This is a nullable type. Nullable types allow value types (e.g. int
s and structures like DateTime) to contain null.
The ?
is syntactic sugar for Nullable<DateTime>
since it's used so often.
To call ToString()
:
if (timstamp.HasValue) { // i.e. is not null return timestamp.Value.ToString(); } else { return "<unknown>"; // Or do whatever else that makes sense in your context }
?
makes a value type (int
, bool
, DateTime
, or any other struct
or enum
) nullable via the System.Nullable<T>
type. DateTime?
means that the variable is a System.Nullable<DateTime>
. You can assign a DateTime
or the value null
to that variable. To check if the variable has a value, use the HasValue
property and to get the actual value, use the Value
property.
That is a shortcut for Nullable<DateTime>
. Value types, like DateTime
cannot be null; Nullable<>
wraps the value type so that you have an object with a HasValue
property and other convenient features.
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