Answers:
首先看一下乔恩·斯基特(Jon Skeet)有关C#转换的一般问题的答案:
不要这样做:
if (randomObject is TargetType) { TargetType foo = (TargetType) randomObject; // Do something with foo }
如果randomObject是字段而不是局部变量,则不仅检查两次,而且还可能检查其他内容。如果另一个线程在两者之间更改了randomObject的值,则“ if”可能会传递,但强制转换会失败。
(...)
如果randomObject可能是TargetType的实例,而TargetType是引用类型,则使用如下代码:
TargetType convertedRandomObject = randomObject as TargetType; if (convertedRandomObject != null) { // Do stuff with convertedRandomObject }
然后看到类似的主题: