我写了以下代码:
object obj = 123; // Line 1
int? num = null; // Line 2
num = obj as int; // Line 3
我在第3行遇到编译时错误 - “as关键字必须与引用类型或可空类型一起使用('int'是不可为空的值类型)”。
我想明白:
虽然我的int可以为空,但为什么它会给出这个错误
2.我们如何在num中获得obj的值? AS关键字不会在这里工作吗?
答案 0 :(得分:4)
Int?
而int
是两种不同的类型。
更改
num = obj as int; // Line
要
num = obj as int?;
为了便于阅读,您甚至可以写:
Nullable<int> num;
num = obj as Nullable<int>;
我会更多地扩展它并说,你如何从可以为空的对象中获取值。嗯,这是单向的。
object obj = 123;
int? num;
num = obj as int?;
int myNumericValue = default(int);
If (num.HasValue) myNumericValue = num.Value;
答案 1 :(得分:1)
为了让它发挥作用......
num = obj as int; // Line 3
...如果无法将as
强制转换为null
,则obj
运算符必须能够返回int
。但int
无法存储null,因此会导致错误。
您有两种选择:
<强> 1。使用nullable int
int? num;
num = obj as int?;
<强> 2。使用更多代码
int num;
num = (obj is int) ? (int)obj : default(int);