写点什么

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

作者:追逐时光者
  • 2025-10-18
    广东
  • 本文字数:1786 字

    阅读完需:约 6 分钟

前言

在 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, ..]);   // falseConsole.WriteLine(fib is [1, _, 2, ..]);   // trueConsole.WriteLine(fib is [_, 1, 2, 3, ..]);     // trueConsole.WriteLine(fib is [.., 1, 2, 3, _ ]);     // trueConsole.WriteLine(even is [2, _, 6]);     // trueConsole.WriteLine(even is [2, .., 6]);    // trueConsole.WriteLine(odd is [.., 3, 5]); // trueConsole.WriteLine(even is [.., 3, 5]); // falseConsole.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#/.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

发布于: 刚刚阅读数: 3
用户头像

不积跬步无以至千里,不积小流无以成江海! 2020-01-14 加入

微软MVP、华为云HCDE、华为云云享专家、51CTO专家博主、阿里云专家博主、博客园推荐博客、CSDN博客专家、腾讯云创作之星、掘金优秀创作者,一个热爱开源的全栈软件工程师,擅长C#、.NET、Vue等相关技术开发。

评论

发布
暂无评论
C# as 和 is 运算符区别和用法_C#_追逐时光者_InfoQ写作社区