This question already has answers here:
Direct casting vs 'as' operator?
                                
                                    (17个答案)
                                
                        
                        
                            Casting vs using the 'as' keyword in the CLR
                                
                                    (18个回答)
                                
                        
                        
                            What is the difference between casting and using “as” in C#?
                                
                                    (8个答案)
                                
                        
                                6年前关闭。
            
                    
假设有一个接口A和一个实现该接口的类的变量'x'。现在,我可以执行以下操作:

var a = (A) x;


要么:

var a = x as A;


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

最佳答案

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

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

考虑以下示例:

expression as type


该代码等效于以下表达式,但表达式变量仅被评估一次。

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


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

参考:
as (C# Reference)

09-10 02:06
查看更多