【问题标题】: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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多