as和is的区别
-
is 只是做类型兼容判断,并不执行真正的类型转换。返回true或false,不会返回null,对象为null也会返回false。
-
as运算符将表达式结果显式转换为给定的引用类型或可以为null值的类型。 如果无法进行转换,则as运算符返回 null。
总结:as模式的效率要比is模式的高,因为借助is进行类型转换的化,需要执行两次类型兼容检查。而as只需要做一次类型兼容,一次null检查,null检查要比类型兼容检查快。
is 关键字:
is
关键字用于判断一个对象是否兼容于指定的类型。它会返回一个 bool
值,指示对象是否与指定类型兼容。
示例:
// 定义一个对象
object obj = new Person();
// 使用 is 关键字判断对象是否为 Person 类型
bool isPerson = obj is Person;
// 打印结果
Console.WriteLine(isPerson); // True
as 运算符:
as
运算符用于将对象转换为指定的类型。如果转换成功,则返回转换后的对象;如果转换失败,则返回 null
。
示例:
// 定义一个对象
object obj = new Person();
// 使用 as 运算符将对象转换为 Person 类型
Person person = obj as Person;
// 判断转换是否成功
if (person != null)
{
// 转换成功,执行操作
Console.WriteLine("转换成功!");
}
else
{
// 转换失败
Console.WriteLine("转换失败!");
}
总结:
is
关键字用于判断类型兼容性,而as
运算符用于执行类型转换。is
关键字返回bool
值,而as
运算符返回转换后的对象或null
。as
模式的效率要比is
模式的高,因为as
只需要进行一次类型兼容检查和一次 null 检查,而is
需要进行两次类型兼容检查。
建议:
- 当只需要判断类型兼容性时,使用
is
关键字。 - 当需要执行类型转换时,使用
as
运算符。