I have an extension method that looks like this:
public static bool DoesNotExist(this object toCheck)
{
return toCheck == null;
}
generally I use it like this:
if(myObject.DoesNotExist())
{
}
I have an expression which contains a conditional access expression like this
if (myObject?.MyProperty == null)
which the compiler is happy with. If I that expression to use my extension method, like this:
if (myObject?.MyProperty.DoesNotExist())
then I get a compiler error
CS0266 Cannot implicitly convert type 'bool?' to 'bool'. An explicit conversion exists (are you missing a cast?)
The type of MyProperty is some object from my domain, not a bool.
Why does this happen, and can I prevent it?

A null conditional expression always has a nullable return type - after all, it has to have an overall result of null if the left hand side is null.
So the type of myObject?.MyProperty.DoesNotExist() is Nullable<bool>, which can't be used as the condition for an if statement.
It's easy to fix either by direct comparison with a bool constant, or using the null coalescing operator:
if (myObject?.MyProperty.DoesNotExist() == true)
if (myObject?.MyProperty.DoesNotExist() ?? false)
In both of those cases, if myObject is null, execution won't enter the body of the if statement. If you want the opposite behaviour, you can use:
if (myObject?.MyProperty.DoesNotExist() != false)
if (myObject?.MyProperty.DoesNotExist() ?? true)
However, I'm not sure that your extension method is actually a useful one - at least not here. If you're just doing a null comparison, do that directly:
if (myObject?.MyProperty == null)
That will go into the body of the if statement if either myObject is null, or myObject.MyProperty is null.
See more on this question at Stackoverflow