C#怎么使用is和as操作符 C#类型转换与检查方法

来源:这里教程网 时间:2026-02-21 17:37:17 作者:

isas 是 C# 中用于类型检查与安全转换的两个关键操作符,它们不抛异常、不强制转型,适合在不确定对象实际类型时使用。

用 is 判断类型是否兼容

is 用于运行时检查对象是否为指定类型(或其派生类型),返回 bool 值。它只做类型兼容性判断,不进行转换。

语法:
obj is TypeName
—— 返回 true 表示 obj 非 null 且可隐式/显式视为 TypeName
支持泛型类型、可空类型、接口,也支持模式匹配(C# 7+):
obj is string s
可同时判断并赋值
注意:
null is SomeType
永远为 false(除非 SomeType 是可空引用类型且启用了 nullable 引用类型)

用 as 安全转换类型

as 尝试将对象转换为指定引用类型或可空值类型,成功则返回转换后对象,失败则返回 null(对值类型不适用,会编译错误)。

语法:
var result = obj as TypeName;
—— 等价于
obj is TypeName ? (TypeName)obj : null
,但更简洁高效
仅适用于引用类型、可空值类型(如
int?
)、接口;不能用于非可空值类型(如
int
DateTime
避免重复类型检查:先
is
再强转是冗余写法,推荐直接
as
+ null 检查

is 和 as 的典型配合用法

常见场景是「先尝试转换,再使用」,推荐用

as
+ 空值检查,或 C# 7+ 的 is 模式匹配写法:

传统方式:
var str = obj as string; if (str != null) { /* 使用 str */ }
模式匹配(更简洁):
if (obj is string s) { /* 直接使用 s */ }
还可嵌套类型检查:
if (obj is List<int> list && list.Count > 0)</int>

什么时候不该用它们?

isas 不适用于值类型直接转换(比如把

object
int
),此时需用
Convert.ToInt32()
(int)(object)
(后者可能抛
InvalidCastException
)。

值类型转换建议优先用
TryParse
Convert
类方法
若确定类型一定匹配,且追求性能,可考虑直接强制转换(但风险自担)
as
对 struct 类型无效,编译报错;想转值类型请用
obj as int?
再取
.Value
(注意判空)

基本上就这些。is 看“是不是”,as 试“能不能转”,两者配合能写出更安全、更清晰的类型处理逻辑。

相关推荐