is 和 as 是 C# 中用于类型检查和转换的两个操作符,虽然它们都与类型相关,但用途和行为有明显区别。
is 操作符:判断类型是否匹配
is 用于判断一个对象是否属于某个特定类型或能转换为该类型(不包括用户自定义转换)。它返回一个布尔值,不会进行实际转换。
常见用法: 检查变量是否为某一引用类型、值类型或接口的实例。 常用于条件判断中,避免无效转换。示例:
object obj = "Hello";
if (obj is string)
{
Console.WriteLine("obj 是字符串类型");
}
注意:从 C# 7 开始,is 还支持模式匹配,可在判断的同时声明变量:
if (obj is int number)
{
Console.WriteLine($"数值是 {number}");
}
as 操作符:尝试安全类型转换
as 用于将引用类型或可空类型转换为指定类型。如果转换失败,返回 null 而不是抛出异常。
特点: 只能用于引用类型、可空类型或接口之间的转换。 不能用于值类型之间的转换(如 int 到 double)。 更高效且安全,适合在不确定类型时使用。示例:
object obj = "Hello";
string str = obj as string;
if (str != null)
{
Console.WriteLine(str);
}
对比直接强转:
string str = (string)obj; // 若类型不符会抛 InvalidCastException
is 和 as 的结合使用建议
有时你会看到先用 is 判断再用 as 转换,但这不是最优做法,因为做了两次类型检查。
推荐写法: 优先使用 as 并判断结果是否为 null,避免重复检查。 若只需判断类型而不需要转换,使用 is 更清晰。高效写法示例:
object obj = GetSomeObject();
string str = obj as string;
if (str != null)
{
// 使用 str
}
基本上就这些。合理选择 is 和 as,能让代码更安全、简洁。对于值类型转换,应使用 Convert 类或 TryParse 等方法。类型检查和转换虽小,但用对了能减少运行时错误。
