我在自定义定义中有以下代码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)
};