任何人都可以告诉代码片段之间的实际区别吗?
var unknown = (object)new List<string>();
// Snippet 1: as operator
foreach (var item in unknown as IList<int>) {
// Do something with item
}
// Snippet 2: cast operator
foreach (var item in (IList<int>)unknown) {
// Do something with item
}
答案 0 :(得分:2)
因为运算符不会引发错误,但强制转换会引发错误InvalidCastException
来自MSDN
as运算符就像一个转换器,除了它在转换失败时产生null而不是引发异常。
expression as type
相当于:
expression is type ? (type)expression : (type)null
除了表达式只被评估一次。
请注意,as运算符仅执行引用转换和装箱转换。 as运算符不能执行其他转换,例如用户定义的转换,而应使用强制转换表达式执行转换。
答案 1 :(得分:0)
使用as运算符与C#中的强制转换不同,有三个重要方面:
当您尝试转换的变量不是请求的类型或其继承链时,它返回null,而不是抛出异常。
它只能应用于转换为引用类型的引用类型变量。
<强> Referenced Blog 强>