I have the following code in a definition of a custom IEqualityComparer<Uri?>:
public bool Equals(Uri? x, Uri? y) => (x, y) switch
{
(null, _) => false,
(_, null) => false,
({}, {}) => x.Equals(y)
};
I'm getting a CS8602 warning on the Equals call in the last arm, telling me that there's a possibility x is null there. But I've just matched x against the object pattern {} which wouldn't match if x were null. Am I missing a possible control flow that causes x to be null in that branch or is it impossible and I should just bang-operator it away? Is it an analyzer bug or a known limitation?
Update
It might be worth noting that this only happens if I destructure the tuple. This code is correct and gives no warnings:
public bool Equals(Uri? x, Uri? y) => x switch
{
null => false,
{} => x.Equals(y)
};