在下面的代码中使用Cast和AS运算符之间的区别?

可能重复:
直接投射vs'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
}

因为操作符不会引发错误,但是InvalidCastException会引发InvalidCastException错误

来自MSDN

as运算符就像一个强制转换,除了在转换失败时产生空值而不是引发异常。

expression as type

相当于:

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

除了表达式只评估一次。

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


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

  • 当您尝试转换的变量不是所请求的类型或它的继承链时,它将返回null,而不是抛出异常。

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

  • 使用as不会执行用户定义的转换,如转换语法将执行的隐式或显式转换运算符。
  • 参考博客

    链接地址: http://www.djcxy.com/p/73745.html

    上一篇: Difference between using Cast and AS operator in following code?

    下一篇: When to use the "as" keyword and when to use () casting?