【问题标题】:What is a difference between casts: (A) x and x as A? [duplicate]演员表之间有什么区别:(A)x和x作为A? [复制]
【发布时间】:2013-02-20 22:22:47
【问题描述】:

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

var a = (A) x;

或者:

var a = x as A;

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

【问题讨论】:

标签: c# .net casting


【解决方案1】:

通过(A)x,您正在执行强制转换,它肯定会尝试并强制转换,如果无法转换,则会出现异常。

如果您使用as,它将转换为null

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

【讨论】:

    【解决方案2】:

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

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

    考虑以下示例:

    expression as type
    

    代码等价于下面的表达式,只是表达式变量只计算一次。

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

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

    参考: as (C# Reference)

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2014-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-25
        相关资源
        最近更新 更多