演员之间有什么区别:(A)x和x是A?

时间:2013-02-20 14:19:21

标签: c# .net casting

假设有一个接口A和一个实现该接口的类的变量'x'。现在我可以执行这些:

var a = (A) x;

或者:

var a = x as A;

我知道在失败的情况下,第一个语句将抛出InvalidCastException,第二个语句将返回null。但还有其他区别吗?表现特别好吗?

3 个答案:

答案 0 :(得分:2)

通过执行(A)x你正在进行一次演员阵容,但是如果它不能施放则会有一个例外。

如果您使用as,则会投出或null

但是,您拥有自己尝试此操作所需的所有示例代码,因此您可以在询问我们所说的代码之前尝试这样做。

答案 1 :(得分:1)

第一个尝试立即转换,第二个实际检查x是否为A类型。

答案 2 :(得分:1)

as运算符就像一个强制转换操作。但是,如果无法进行转换,则返回null而不是引发异常。

您可以使用as运算符在兼容的引用类型或可空类型之间执行某些类型的转换。

考虑以下示例:

expression as type

代码等同于以下表达式,只是表达式变量只被计算一次。

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

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

参见: as (C# Reference)