C# as 和 is 运算符区别和用法示例解析

 更新时间:2025年01月24日 09:06:03   作者:追逐时光者  
在C#中,as 和 is 关键字都用于处理类型转换的运算符,但它们有不同的用途和行为,本文我们将详细解释这两个运算符的区别和用法,需要的朋友可以参考下

前言

在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面试宝典

参考文章

到此这篇关于C# as 和 is 运算符区别和用法的文章就介绍到这了,更多相关C# as 和 is 运算符内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在 C# 中使用 Span<T> 和 Memory<T> 编写高性能代码的详细步骤

    在 C# 中使用 Span<T> 和 Memory<

    在本文中,将会介绍 C# 7.2 中引入的新类型:Span 和 Memory,文章深入研究 Span<T> 和 Memory<T> ,并演示如何在 C# 中使用它们,需要的朋友可以参考下
    2022-08-08
  • Unity实现卡牌翻动效果

    Unity实现卡牌翻动效果

    这篇文章主要为大家详细介绍了Unity实现卡牌翻动效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • C#中系统时间和UNIX时间戳互相转换

    C#中系统时间和UNIX时间戳互相转换

    本文主要介绍C#中系统时间和UNIX时间戳相互转换的方法,大家可以直接拿去用,希望有用。
    2016-05-05
  • C# DataTable分页处理实例代码

    C# DataTable分页处理实例代码

    有时候我们从数据库获取的数据量太大,而我们不需要一次性显示那么多的时候,我们就要对数据进行分页处理了,让每页显示不同的数据。
    2017-06-06
  • C#变量命名规则小结

    C#变量命名规则小结

    本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • C#软件注册码的实现代码

    C#软件注册码的实现代码

    开发软件时,当用到商业用途时,注册码与激活码就显得很重要了,现在的软件技术实在在强了,各种国内外大型软件都有注册机制,但我们学习的是技术
    2013-05-05
  • C#实现网络小程序的步骤详解

    C#实现网络小程序的步骤详解

    经常要检测某些IP地址范围段的计算机是否在线。有很多的方法,比如进入到网关的交换机上去查询、使用现成的工具或者编写一个简单的DOS脚本等等,这些都比较容易实现。本文将用C#来实现,感兴趣的可以了解一下
    2022-12-12
  • C#实现xml文件反序列化读入数据到object的方法

    C#实现xml文件反序列化读入数据到object的方法

    这篇文章主要介绍了C#实现xml文件反序列化读入数据到object的方法,涉及C#操作XML文件类型转换的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • C#无限参数的写法

    C#无限参数的写法

    这篇文章主要介绍了C#无限参数的写法,通过循环遍历再结合paras.Add方法实现无限参数的功能,是比较实用的技巧,需要的朋友可以参考下
    2014-12-12
  • C#标识符的使用小结

    C#标识符的使用小结

    C#标识符还是比较常见的东西,这里我们主要介绍C#标识符中的用法,包括介绍 static 的方法和bool 的形参等方面
    2014-01-01

最新评论