C#中的不同转换类型

bor*_*ula 2 c# casting

可能的重复:
转换:(NewType)与Object为NewType
为什么C#"as"运算符如此受欢迎?

嘿,

我知道这可能是一个愚蠢的问题,但今天我怀疑这个问题.

这样做有什么区别

String text = (String) variable;
Run Code Online (Sandbox Code Playgroud)

String text = variable as String;
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

演员可以做三件事:

  • 执行用户定义的转换
  • 执行拆箱转换
  • 执行参考转换

as操作几乎总是引用转换,唯一的例外是取消装箱到一个空类型:

object x = "hello";
int? y = x as int?; // y is null afterwards
Run Code Online (Sandbox Code Playgroud)

然后是执行时失败的转换行为.所以差异是:

  • 执行引用转换或拆箱的转换将InvalidCastException失败; as将导致目标类型的null值
  • 强制转换可以执行用户定义的转换; as不能
  • 强制转换可以取消装入不可为空的值类型; as如果目标类型是可空值类型,则只能用于取消装箱