在C#中,可以使用AS关键字提取值吗?怎么样?

时间:2017-09-02 02:28:45

标签: c# type-conversion typechecking

我写了以下代码:

        object obj = 123; // Line 1
        int? num = null; // Line 2
        num = obj as int; // Line 3

我在第3行遇到编译时错误 - “as关键字必须与引用类型或可空类型一起使用('int'是不可为空的值类型)”。

我想明白:
虽然我的int可以为空,但为什么它会给出这个错误 2.我们如何在num中获得obj的值? AS关键字不会在这里工作吗?

2 个答案:

答案 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);