以下代码中使用Cast和AS运算符的区别?

时间:2012-09-29 09:40:53

标签: c#

  

可能重复:
  Direct casting vs 'as' operator?

任何人都可以告诉代码片段之间的实际区别吗?

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
}

2 个答案:

答案 0 :(得分:2)

因为运算符不会引发错误,但强制转换会引发错误InvalidCastException

来自MSDN

as运算符就像一个转换器,除了它在转换失败时产生null而不是引发异常。

expression as type

相当于:

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

除了表达式只被评估一次。

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

答案 1 :(得分:0)

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

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

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

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