C#与铸造的区别和?

时间:2009-06-05 10:37:53

标签: c# casting

  

可能重复:
  What is the difference between the following casts in c#?

在C#中,投射对象或使用as关键字有区别吗?希望这段代码能说明我的意思......

String text = "Hello hello";
Object obj = text; 

String originalCast = ((String)obj).ToUpper();
String originalAs = (obj as String).ToUpper();

由于

:)

4 个答案:

答案 0 :(得分:78)

as永远不会抛出InvalidCastException。相反,如果转换失败,它将返回null(如果示例中的obj不是string,则会为您提供NullReferenceException

答案 1 :(得分:19)

除已提及的InvalidCastException之外......

如果目标类型是值类型(除非它是可空的),

as将不起作用:

obj as int // compile time error.

答案 2 :(得分:8)

据我所知!

如果'cast'失败,那么使用'as'将返回null,如果转换失败,则cast会抛出异常。

答案 3 :(得分:5)

如果obj不是String,则使用'as'不会抛出异常。相反,它将返回null。在您的情况下,由于您立即引用此空值,因此仍会抛出异常。