is仅判断类型并返回布尔值,不执行转换;as尝试安全转换,失败返回null且只检查一次类型。C# 7.0+支持is模式匹配(如if(obj is string str))实现判断与赋值一体化。

在C#中进行类型转换时,is 和 as 操作符常被使用,它们都能用于判断对象是否可以安全地转换为某一类型,但机制和适用场景不同。理解它们的差异有助于写出更高效、更安全的代码。
is 操作符用于判断一个对象是否属于某个特定类型或能隐式转换为该类型。它只返回布尔值,不执行实际转换。
例如:object obj = "Hello";
if (obj is string) {
Console.WriteLine("obj 是字符串类型");
}
这段代码仅做判断,如果想获取转换后的 string 类型变量,还需再次转换:
string str = (string)obj; // 需要额外强制转换
这意味着使用 is 后再强转,实际上进行了两次类型检查,影响性能。
as 操作符尝试将对象转换为指定类型,如果失败则返回 null(引用类型)或可空值类型的 null 值,不会抛出异常。
例如:object obj = "Hello";
string str = obj as string;
if (str != null) {
Console.WriteLine(str);
}
这种方式只需一次类型检查,效率更高。特别适合在不确定对象类型时尝试转换。
注意:as 只适用于引用类型和可空值类型。对普通值类型(如 int、bool)使用会编译错误。
根据使用场景选择合适的方式:
if (obj is string str) {
Console.WriteLine(str); // 直接使用 str
}
这种写法既完成类型判断,又直接声明并赋值变量,兼具安全性和简洁性。
基本上就这些。合理使用 is 和 as,能让类型转换更安全高效。关键是避免重复类型检查,同时防止无效强制转换引发异常。不复杂但容易忽略细节。
以上就是C# is和as操作符的区别与应用场景 - 安全的类型转换技巧的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号