在 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 及以上版本中引入,允许在检查类型的同时进行变量声明。