I have found a code written in C# seemingly version 8.0. In the code, there is an exclamation mark before invoking a method. What does this part of the code mean, and above all, what are its uses?
var foo = Entity!.DoSomething();
It's a negation or "not" operator. In practice ! number means "true if number == 0, false otherwise." Google "unary operators" to learn more. Follow this answer to receive notifications.
“exclamation mark in c” Code Answer The negation operator (!) simply just reverses the meaning of its operand.
This would be the null forgiving operator.
It tells the compiler "this isn't null, trust me", so it does not issue a warning for a possible null reference.
In this particular case it tells the compiler that Entity
isn't null.
!
is the Null-Forgiving Operator. To be specific it has two main effects:
it changes the type of the expression (in this case it modifies Entity
) from a nullable type into a non-nullable type; (for example, object?
becomes object
)
it suppresses nullability related warnings, which can hide other conversions
This seems to come up particularly with type parameters:
IEnumerable<object?>? maybeListOfMaybeItems = new object[] { 1, 2, 3 }; // inferred as IEnumerable<object?> var listOfMaybeItems = maybeListOfMaybeItems!; // no warning given, because ! supresses nullability warnings IEnumerable<object> listOfItems = maybeListOfMaybeItems!; // warning about the generic type change, since this line does not have ! IEnumerable<object> listOfItems2 = listOfMaybeItems;
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