0

可能重复:
直接转换与“as”运算符?

谁能说出代码片段之间的实际区别?

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
}
4

2 回答 2

2

as 运算符不会引发错误,但 cast 会引发错误InvalidCastException

来自MSDN

as 运算符类似于强制转换,只是它在转换失败时产生 null 而不是引发异常。

expression as type

相当于:

expression is type ? (type)expression : (type)null

除了该表达式只计算一次。

请注意, as 运算符仅执行引用转换和装箱转换。as 运算符不能执行其他转换,例如用户定义的转换,而应使用强制转换表达式执行。

于 2012-09-29T09:42:30.523 回答
0

使用 as 运算符在三个重要方面不同于 C# 中的强制转换:

  1. 当您尝试转换的变量不是请求的类型或不在其继承链中时,它返回 null,而不是引发异常。

  2. 它只能应用于转换为引用类型的引用类型变量。

  3. 使用 as 不会执行用户定义的转换,例如隐式或显式转换运算符,而强制转换语法将执行此操作。

参考博客

于 2012-09-29T09:49:12.947 回答