关于c#:哪个更好 – (int)值或值为int?

Which is better - (int)value or value as int?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Direct casting vs 'as' operator?

有人能给我解释一下区别吗?哪一个更好用?我知道在某些情况下我只能使用其中一个。

(int)value

value as int


后者无效。你可以使用

1
value as int?

如果您需要"转换(如果可能)"。比…慢

1
2
3
4
5
if (value is int)
{
    int x = (int) value;
    ...
}

不过。如果你不确定value实际上是int的话,这就是你应该使用的。但是,如果您的代码是这样的,如果value不是表示bug的int,那么就无条件强制转换:

1
int x = (int) value;

如果失败,它将抛出一个异常——这通常适用于一个bug。


i value as int会导致编译错误,因为operator must be used with a reference type or nullable type ('int' is a non-nullable value type)会导致编译错误。因此,在处理结构时,总是使用(int)value,对于对象,我更喜欢使用obj as SomeType,因为它更清晰、更直接,而且它自动处理异常(如果在转换过程中发生错误,则运算符返回空值)。