C# as 和 is 运算符区别和用法

news/2025/1/24 8:21:55/文章来源:https://www.cnblogs.com/Can-daydayup/p/18687025

前言

在C#中,as 和 is 关键字都用于处理类型转换的运算符,但它们有不同的用途和行为。本文我们将详细解释这两个运算符的区别和用法。

is 运算符

is 运算符用于检查对象是否是某个特定类型,或者是否可以转换为该类型。它返回一个布尔值 (true 或 false)。

            string title = "Hello DotNetGuide";

            if (title is string)
            {
                Console.WriteLine("是 string 类型");
            }
            else
            {
                Console.WriteLine("不是 string 类型");
            }

            if (title is not null)
            {
                Console.WriteLine("不为 null");
            }
            else
            {
                Console.WriteLine("为 null");
            }

模式匹配

C# 7.0 引入了模式匹配,允许在 is 表达式中进行类型检查和转换:

            object obj = "追逐时光者";

            if (obj is string str)
            {
                Console.WriteLine($" {str}");
            }
            else
            {
                Console.WriteLine("不是指定类型");
            }

列表模式

从 C# 11 开始,可以使用列表模式来匹配列表或数组的元素。以下代码检查数组中处于预期位置的整数值:

int[] empty = [];
int[] one = [1];
int[] odd = [1, 3, 5];
int[] even = [2, 4, 6];
int[] fib = [1, 1, 2, 3, 5];

Console.WriteLine(odd is [1, _, 2, ..]);   // false
Console.WriteLine(fib is [1, _, 2, ..]);   // true
Console.WriteLine(fib is [_, 1, 2, 3, ..]);     // true
Console.WriteLine(fib is [.., 1, 2, 3, _ ]);     // true
Console.WriteLine(even is [2, _, 6]);     // true
Console.WriteLine(even is [2, .., 6]);    // true
Console.WriteLine(odd is [.., 3, 5]); // true
Console.WriteLine(even is [.., 3, 5]); // false
Console.WriteLine(fib is [.., 3, 5]); // true

as 运算符

as 运算符尝试将对象转换为特定类型,如果转换失败,则返回 null 而不是抛出异常。它通常用于在不需要显式检查对象是否为特定类型的情况下进行安全的类型转换。

注意:as 运算符仅考虑引用、可以为 null、装箱和取消装箱转换。它不支持用户定义的或复杂的类型转换,这种情况需要使用强制转换表达式。

            object title = "Hello DotNetGuide";

            string str = title as string;
            if (str != null)
            {
                Console.WriteLine("是 string 类型: " + str);
            }
            else
            {
                Console.WriteLine("不是 string 类型");
            }

            int? num = title as int?;
            if (num.HasValue)
            {
                Console.WriteLine("是 int 类型: " + num.Value);
            }
            else
            {
                Console.WriteLine("不是 int 类型");
            }

C#/.NET/.NET Core面试宝典

  • https://github.com/YSGStudyHards/DotNetGuide

本文已收录至C#/.NET/.NET Core面试宝典中,欢迎关注获取更多面试干货内容。

参考文章

  • https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/operators/is
  • https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/operators/type-testing-and-cast#as-operator

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/874592.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025.1.24

树上背包DESTRUCTION 3,2,109 年论文现在才学也是没救了。 对于重量为 \(1\) 的,直接每次枚举 size 就可以做到 \(n^2\),证明考虑一个点对只会在 lca 出有一个贡献。 考虑重量是 \(v_i\),定义 \(v_i\) 的上界是 \(V\)。 暴力做是 \(nV^2\) 的,实在是不优美。 考虑更改更新顺…

读量子霸权13逆转衰老

热力学定律解释衰老,开放系统或可逆转。量子计算机或助解决衰老,实现生物与数字永生。热量限制、DNA修复、细胞重编程等或延长寿命,但需防副作用。1. 热力学第二定律 1.1. 热力学三大定律1.1.1. 第一定律简单地指出,物质和能量的总量是一个常数,能量不会从无到有,总是守恒…

更改暗盒DX码-DIY胶卷DX码

更改暗盒DX码-DIY胶卷DX码我们平时用纯机械相机可能更多一些,纯机械相机多数也不具备读取DX码这些信息的功能。有些傻瓜相机或自动相机需要读取这些信息,如果不能正确识别,有时候我们使用分装卷,暗盒都是二次利用的,因此DX码也是不正确的,机器读取出来就会造成曝光错误。…

SEKONIC L-206点测光表使用教程

本文记录SEKONIC L-206点测光表的使用方法。 先来一些测光表的美照。(咸鱼找的图,这里感谢前辈们)电池长这样(1.35V汞电池,现已停产,替代方案可以看之前的文章)视窗,这里是有一半蓝色膜,按测光按钮会弹开使用教程:看上图,1的位置是目视窗口,也是转盘,2是测光按钮,…

Fix: The Mapped Network Drive Could Not Be Created in Windows

https://www.minitool.com/backup-tips/the-mapped-network-drive-could-not-be-created.htmlEdit the Group Policy To fix “The mapped network drive could not be created”, you need to change some settings in Group Policy. Step 1: Open the Run dialog box by pres…

一个DIY测光表的使用说明

近期比较沉迷测光表,除收了几个老式机械测光表之外,还收了一个DIY的迷你测光表。(本文不营销,主要是给自己记录使用说明书) (因懒得拍照,直接偷卖家前辈的图了)还有专门为徕卡设计的热靴说明书

PowerShell命令用于管理TPM(受信平台模块)的功能分类及命令示例表格。此表格包含了TPM相关的常见管理任务和相应的命令,帮助您高效地使用 PowerShell 管理TPM。

PowerShell命令用于管理TPM(受信平台模块)的功能分类及命令示例表格。此表格包含了TPM相关的常见管理任务和相应的命令,帮助您高效地使用 PowerShell 管理TPM。功能分类 命令 说明 示例启用TPM Enable-TpmAutoProvisioning 启用TPM自动配置 Enable-TpmAutoProvisioning 启用…

保护模式下的内存访问_1

本文讨论了进入保护模式的一些准备工作,以及保护模式下访问内存的基本机制写在前面 本文讨论了在保护模式下访问内存的准备工作以及具体访问流程,还点出了一些细节问题。由于笔者水平有限,文中难免出现纰漏,恳请各位读者指正。 IA-32架构下段寄存器的变化 我们知道,在x86处…

全面预算体系+报表自动化,实现财务数字化

财务需求 1、经营背景 在公司近几年产业高速发展、外部市场环境快速变化的大背景下,决策层对公司的经营管理、分析调度、决策规划需求日益增加,公司内部管理与行业外部监管对财务数据效率与质量要求更为严格。因此,财务部急需通过数字化转型重塑财务工作流程、提升数据处理效…

【MC】脆骨症整合包开服记录

2024年12月,我们伟大的午睡千秋同志租了一台服务器来玩MC,于是一群CS转MC的人出现了。 然而,令人悲伤的是,2025年1月21日,一群从ins来的野蛮匪徒入侵了服务器,并摧毁了这个存档沟槽的匪徒,初升东曦而午睡千秋先生并没有定期备份,也没有写过自动备份脚本,因此这个服务器…

ACM寒假集训第一次专题任务

ACM寒假集训第一次专题任务 一、 题目:Long Loong解题思路: 因为o出现次数由输入的x所决定,可以想到使用一个循环解决。 AC代码: #include<iostream> using namespace std; int main() {int X;cin>>X;cout<<"L";for(int i=1;i<=X;i++){cout…