假设有一个接口A
和一个实现该接口的类的变量'x'。现在我可以执行这些:
var a = (A) x;
或者:
var a = x as A;
我知道在失败的情况下,第一个语句将抛出InvalidCastException
,第二个语句将返回null
。但还有其他区别吗?表现特别好吗?
答案 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运算符无法执行其他转换,例如用户定义的转换,而应使用强制转换表达式执行转换。