C# is关键字
示例
检查对象是否与给定类型兼容,即对象是该BaseInterface类型的实例还是从BaseInterface以下类型派生的类型:
interface BaseInterface {} class BaseClass : BaseInterface {} class DerivedClass : BaseClass {} var d = new DerivedClass(); Console.WriteLine(d is DerivedClass); //真正 Console.WriteLine(d is BaseClass); //真正 Console.WriteLine(d is BaseInterface); //真正 Console.WriteLine(d is object); //真正 Console.WriteLine(d is string); //假 var b = new BaseClass(); Console.WriteLine(b is DerivedClass); //假 Console.WriteLine(b is BaseClass); //真正 Console.WriteLine(b is BaseInterface); //真正 Console.WriteLine(b is object); //真正 Console.WriteLine(b is string); //假
如果强制转换的目的是使用对象,则最佳做法是使用as关键字'
interface BaseInterface {} class BaseClass : BaseInterface {} class DerivedClass : BaseClass {} var d = new DerivedClass(); Console.WriteLine(d is DerivedClass); //真正 - valid use of 'is' Console.WriteLine(d is BaseClass); //真正 - valid use of 'is' if(d is BaseClass){ var castedD = (BaseClass)d; castedD.Method(); //有效,但不是最佳做法 } var asD = d as BaseClass; if(asD!=null){ asD.Method(); //首选方法,因为您只需承担一次拆箱罚款 }
但是,从C#7patternmatching功能扩展了is运算符以检查类型并同时声明一个新变量。与C#7相同的代码部分:
if(d is BaseClass asD ){ asD.Method(); }