C#与铸造的区别和?

39 c# casting

可能重复:
c#中的以下强制转换之间有什么区别?

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

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

String originalCast = ((String)obj).ToUpper();
String originalAs = (obj as String).ToUpper();
Run Code Online (Sandbox Code Playgroud)

谢谢

:)

Mat*_*hen 80

as永远不会抛出一个InvalidCastException.相反,如果转换失败,它将返回null(这将在您的示例中为您提供NullReferenceExceptionif obj不是a string).

  • @rein - 我认为Blindy意味着他提供的示例不会导致运行时错误.`obj`被分配给第2行中的字符串对象. (3认同)
  • @Blindy - 是的.他正试图对可能是空对象的东西做一个ToUpper(). (2认同)

Meh*_*ari 19

除了InvalidCastException已经提到的......

as 如果目标类型是值类型(除非它可以为空),它将不起作用:

obj as int // compile time error.
Run Code Online (Sandbox Code Playgroud)


Lew*_*wis 8

我所知道的!

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


Pau*_*ell 5

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