【问题标题】:In C#, can value be extracted using AS keyword? How?在 C# 中,可以使用 AS 关键字提取值吗?如何?
【发布时间】:2017-09-02 02:28:45
【问题描述】:
我写了以下代码:
object obj = 123; // Line 1
int? num = null; // Line 2
num = obj as int; // Line 3
我在第 3 行遇到编译时错误 - “as 关键字必须与引用类型或可空类型一起使用('int' 是不可为空的值类型)”。
我想了解:
1. 虽然我的 int 可以为空,但为什么会出现这个错误
2、如何获取obj中num的值? AS 关键字在这里不起作用吗?
【问题讨论】:
标签:
c#
type-conversion
typechecking
【解决方案1】:
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;
【解决方案2】:
为了让这个工作......
num = obj as int; // Line 3
...如果obj 不能转换为int,则as 运算符必须能够返回null。但是int不能存储null,所以会报错。
你有两种选择:
1.使用可为空的 int
int? num;
num = obj as int?;
2。使用更多代码
int num;
num = (obj is int) ? (int)obj : default(int);