在 C# 中,as
和 is
是用于类型转换和类型检查的两个运算符,它们的用法和语义有所不同。
is
运算符
is
运算符用于检查一个对象是否是某个特定类型的实例。它返回一个布尔值 (true
或 false
)。
用法示例:
object obj = "Hello, World!";
if (obj is string)
{
Console.WriteLine("obj 是一个字符串");
}
在这个示例中,is
运算符检查 obj
是否是 string
类型的实例。如果是,它将输出相应的消息。
as
运算符
as
运算符用于将一个对象转换为指定的类型。如果对象的类型可以转换,它将返回该类型的实例;如果不能转换,它将返回 null
而不是抛出异常。
用法示例:
object obj = "Hello, World!";
string str = obj as string;
if (str != null)
{
Console.WriteLine($"obj 转换为字符串: {str}");
}
在这个示例中,as
运算符尝试将 obj
转换为 string
类型。如果转换成功,str
将持有该字符串的值;如果转换失败,str
将为 null
。
总结
is
运算符:用于检查类型,返回布尔值。as
运算符:用于安全地转换类型,返回指定类型的实例(如果转换成功)或null
(如果失败)。
注意事项
- 使用
as
运算符时,如果目标类型是值类型(如int
、bool
等),则不能直接使用as
,因为它仅适用于引用类型。
object obj = 123;
int? number = obj as int?; // 正确,转换为可空类型
- 使用
is
运算符时,通常可以与模式匹配结合使用,以简化代码:
if (obj is string str)
{
Console.WriteLine($"obj 是一个字符串: {str}");
}
这种方式在 C# 7.0 及以上版本中引入,允许在检查类型的同时进行变量声明。