Advertisement

C#is和as关键字

阅读量:
复制代码
开发工具与关键技术: C#

作者:小益

撰写时间:2022/5/8

is关键字用于判断对象是否与指定类型兼容。这里的is并非表示"是"的意思,而是表示"兼容"的含义。具体来说,在这种情况下如果被检查的对象能够被强制转换为指定类型而不引发异常,则表明它们之间存在类型兼容性。当提供的表达式不为空时,并且所涉对象能够成功转换为指定类型,则is运算符的结果为true;反之,在发生异常的情况下则返回false。

is的使用方式:

![](https://ad.itadn.com/c/weblog/blog-img/images/2025-02-25/VGSvZjK0yqCTFrsMtnlbg9IDe1U6.png)

如果已知表达式始终为true或false,则is关键字将在编译阶段触发警告(通常只有在运行时才评估类型兼容性)。该运算符仅关注引用转型、包装转型以及反向包装转型(不包括自定义类型的任何转型)。尽管int与double之间存在类型兼容性(尽管如此),但使用is运算符得到的结果却是false(这是因为该运算符仅关注引用转型、包装转型以及解包转型)。此外,在is运算符左侧禁止使用匿名方法。

引用转换:

当is作用于一个对象引用时(when it acts upon an object reference),它会确定被引用对象变量是否属于指定类型的派生类(type class)。如果被引用变量属于派生类,则返回true;否则返回false。例如:

![](https://ad.itadn.com/c/weblog/blog-img/images/2025-02-25/JQCPhMKmzAZYo8UsLyB4iG53jXpq.png)

装箱转换:

![](https://ad.itadn.com/c/weblog/blog-img/images/2025-02-25/TVabAXJl3mSBtrfHCEcykOWqoUgY.png)

拆箱转换:

![](https://ad.itadn.com/c/weblog/blog-img/images/2025-02-25/adu8I923KHZjsl4C7W5QOvogchft.png)

然而Point与PointF、Size与SizeF以及Rectangle与RectangleF之间能够相互转
换,
但使用System.Iostream类中的Write方法时,
由于其内部实现采用了基于字符集的编码机制,
即使传递的是Unicode字符,
也会被正确处理。
此外,
即使目标文件或设备的编码不同,
通过指定正确的编码参数也能实现预期效果。
通过上述改写后的句子可以看出,
并未改变原句的意思或信息。

例子:

![](https://ad.itadn.com/c/weblog/blog-img/images/2025-02-25/1oYrqfa4NbMmuFXi35ALIZUDTzOW.png)

该运算符用于在兼容的引用类型间执行某种类型的转换。其中针对继承关系而言,在这种情况下可将子分类对象转为父分类对象;但反之则无法实现;此外,在不同分类对象之间也不允许数值型数据间的相互转换。例如:

![](https://ad.itadn.com/c/weblog/blog-img/images/2025-02-25/WCeyvHwIMA0EZ58P17dFn2hVKgNt.png)

结果:

not?a?string

hello

not?a?String

在 is 运算符的左侧不允许使用匿名方法。lambda 表达式属于例外。

![](https://ad.itadn.com/c/weblog/blog-img/images/2025-02-25/73C4KuSsXReFYnmfh0IE5ZLyvcbl.png)

结果:YES

全部评论 (0)

还没有任何评论哟~