似乎在C#7中我们得到了一个新的模式匹配机制。
如this article中所述,您可以使用is
关键字检查变量是否具有特定值。
据我所知,is
用于检查类型,而不是内容。
所以我想知道 - 在检查变量是否具有某个值时,在模式匹配中使用is
而不是==
或Equals()
有什么好处?
答案 0 :(得分:1)
传统上,是运算符用于测试实例是某种类型还是基类型。 (虽然因为简洁而 as 是首选)
class Shape {}
class Circle : Shape {}
var s = new Shape();
var c = new Circle();
Shape nullShape = null;
var isCaCircle = c is Circle; // -> true
var isSaCircle = s is Circle; // -> false
var isCaShape = c is Shape; // -> true
var isNullShapeNull = nullShape is null; // -> true;
了解这一点,在模式匹配表达式中使用它更直观,如:
if (c is Shape s) {
// use s of type Shape here
}
我认为选择是是因为更接近模式匹配需求并且表达意图比 == 更好,它可以执行引用检查或等式检查,但不是多态的类型兼容性检查。
另一方面,扩展 以执行相等比扩展 == 以执行多态类型兼容性(用于模式匹配目的)更为可行。< / p>