C#中“is {}” https://www.zhihu.com/question/452562503/answer/1814415694
c#有静态类型检查机制,静态类型检查意味着编译时会将类型不符的找出来,使程序在运行时少做一些类型检查。比如参数类型为object,则需要进行一些转换才能完成编译,一种方式是采用as或is,二是采用强类型转换。
is
is 运算符检查对象是否与给定类型兼容,并返回一个Bool值,如果一个对象是某个类型或是其父类型的话就返回为true,否则的话就会返回为false,永远不会抛出异常。如果对象引用为null,那么is操作符总是返回为false。
只适用于引用类型转换、装箱转换和拆箱转换,而不支持值类型转换
as
as 运算符用于在可兼容的引用类型之间执行类似于强制类型转换的操作。与强转不同的是,当转换失败时,as 运算符将返回NULL空,而不是引发异常。因此转换是否成功可以通过结果是否为null进行判断。
优先使用is或as,减少使用强类型转换(cast)
- 无论是AS和IS运算符,都比使用(cast)运算符强制转换更安全。
- 不会抛出异常,免除使用try···catch进行异常捕获的必要和系统开销,只需要判断是否为null。
- 使用is或as,待转换的类型如果既不是目标类型,也不是目标类型所派生出来的类型,也不会报异常,只是返回null或false;而强制转换则有可能使用某些类型的转换逻辑来实现类型转换,比如long转为short,则可能丢失信息。
Comments NOTHING