当前位置: 首页 > article >正文

C# is

  • 类型检查
  • 模式匹配(`Pattern Matching`)
  • 模式匹配的类型模式
  • 与 `as` 的区别
  • 性能注意事项
  • 总结

C#中, is 关键字有多种用途,主要用于 类型检查模式匹配。以下是 is 关键字的主要用法:

类型检查

is 关键字可以用来检查一个对象是否兼容于指定的类型,或者是否实现了指定的接口。如果检查结果为真,则返回 true

  • 示例:
object obj = "Hello, World!";

if (obj is string)
{
    Console.WriteLine("obj 是一个字符串类型");
}
else
{
    Console.WriteLine("obj 不是字符串类型");
}

在上面的例子中,obj is string 检查 obj 是否可以被转换为 string 类型。

模式匹配(Pattern Matching

C# 7.0开始,is 关键字支持模式匹配。模式匹配允许你在检查类型的同时,将对象的值赋给一个新变量,以便进一步使用。

  • 示例:
if (obj is string str)
{
    Console.WriteLine($"obj 是一个字符串,内容为:{str.ToUpper()}"); // 使用 str 变量
}

在上面的例子中,obj is string str 不仅检查 obj 是否是 string 类型,还将 obj 的值赋给变量 str,方便后续使用。

模式匹配的类型模式

is 关键字支持多种模式,包括类型模式、常量模式、逻辑模式等。

  • 类型模式:
if (obj is string)
{
    Console.WriteLine("obj 是字符串类型");
}
  • 常量模式:
if (obj is null)
{
    Console.WriteLine("obj 是 null");
}
  • 逻辑模式(C# 9.0及以上):
if (obj is string str && str.Length > 5)
{
    Console.WriteLine($"obj 是一个长度大于5的字符串:{str}");
}

as 的区别

is 关键字主要用于类型检查,返回一个布尔值(truefalse)。
as 关键字用于类型转换,返回目标类型的对象,如果转换失败则返回 null

  • 示例:
object obj = "Hello";

// 使用 is 检查类型
if (obj is string)
{
    Console.WriteLine("obj 是字符串类型");
}

// 使用 as 进行类型转换
string str = obj as string;
if (str != null)
{
    Console.WriteLine($"obj 转换为字符串后的内容是:{str}");
}

性能注意事项

is 关键字在类型检查时会进行运行时类型检查,因此可能会有性能开销。
如果只需要类型转换而不需要检查类型,建议使用 as

总结

is 关键字在C#中是一个非常强大的工具,不仅可以用于类型检查,还可以结合模式匹配实现更复杂的逻辑。根据你的需求选择合适的用法即可。


http://www.kler.cn/a/576556.html

相关文章:

  • 08react基础-react原理
  • 【K8S系列】深入探究Kubernetes中查看日志的方法
  • 中原银行:从“小机+传统数据库”升级为“OceanBase+通用服务器”,30 +系统成功上线|OceanBase DB大咖说(十五)
  • 【Linux】基础IO_文件系统基础
  • 交大智邦后端Java笔试题
  • Linux驱动学习笔记之I2C通信(观b站讯为电子有感)
  • HOW - React 如何在在浏览器绘制之前同步执行 - useLayoutEffect
  • 2025-03-07 electron无法打包的小问题
  • 20242817李臻《Linux⾼级编程实践》第二周
  • WordPress报502错误问题解决-php-fpm-84.service loaded failed failed LSB: starts php-fpm
  • 为AI聊天工具添加一个知识系统 之133 详细设计之74通用编程语言 之4 架构及其核心
  • 【SegRNN 源码理解】self.revIN可逆实例标准化
  • Elasticsearch:“Your trial license is expired”
  • 乐鑫打造全球首款 PSA Certified Level 2 RISC-V 芯片
  • Qt 实现绘图板(支持橡皮擦与 Ctrl+Z 撤销功能)[特殊字符]
  • React Native 0.76 升级后 APK 体积增大的原因及优化方案
  • linux的文件系统及文件类型
  • 护照阅读器在旅游景区流程中的应用
  • 深度学习网格搜索实战
  • GPO 配置的 4 种常见安全错误及安全优化策略