在以下代码中使用强制转换和 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

来自 MSDN

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

expression as type

相当于:

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

除了表达式只计算一次。

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

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

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

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

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

参考博客

相关内容

  • 没有找到相关文章