What are lifted operators?

Lifted operators are operators which work over nullable types by “lifting” the operators which already exist on the non-nullable form. So for example, if you do:

int? x = 10;
int? y = 10;
int? z = x + y;

That “+” operator is lifted. It doesn’t actually exist on Nullable<int> but the C# compiler acts as if it does, generating code to do the right thing. (For the most case, that’s a matter of checking whether either operand is null; if so, the result is null. Otherwise, unwrap both operands to their non-nullable values, use the normal operator, and then wrap the result back into a nullable value. There are a few special cases around comparisons though.)

See section 6.4.2 (lifted conversion operators) and 7.3.7 (lifted operators) of the C# spec for more information.

Leave a Comment