4

我在自定义定义中有以下代码IEqualityComparer<Uri?>

public bool Equals(Uri? x, Uri? y) => (x, y) switch
{
    (null, _) => false,
    (_, null) => false,
    ({}, {}) => x.Equals(y)
};

Equals在最后一臂的通话中收到 CS8602 警告,告诉我有可能x存在null。但是我刚刚匹配了 if are不匹配x的对象模式。我是否错过了一个可能导致该分支中的控制流,或者它是不可能的,我应该只是将它的操作员删除?它是分析器错误还是已知限制?{}xnullxnull

更新

可能值得注意的是,只有在我解构元组时才会发生这种情况。此代码是正确的,并且没有给出警告:

public bool Equals(Uri? x, Uri? y) => x switch
{
    null => false,
    {} => x.Equals(y)
};
4

0 回答 0