我在自定义定义中有以下代码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
的对象模式。我是否错过了一个可能导致该分支中的控制流,或者它是不可能的,我应该只是将它的操作员删除?它是分析器错误还是已知限制?{}
x
null
x
null
更新
可能值得注意的是,只有在我解构元组时才会发生这种情况。此代码是正确的,并且没有给出警告:
public bool Equals(Uri? x, Uri? y) => x switch
{
null => false,
{} => x.Equals(y)
};