为什么必须写O AS INT并且不能写(INT)O

时间:2014-04-25 20:48:35

标签: c#

我在Jon Skeet的书中找到了一个使用 as 运算符的示例,其中包含 null 值。

using System;

class A
{
    static void PrintValueAsInt32(object o)
    {
        int? nullable = o as int?; // can't write int? nullable = (int?)o
        Console.WriteLine(nullable.HasValue ?
                          nullable.Value.ToString() :
                          "null");
    }

    static void Main()
    {
        PrintValueAsInt32(5);
        PrintValueAsInt32("some string");
    }
}

我无法理解,为什么我不能写int? nullable = (int?)o?当我尝试这样做时,我得到了一个例外。

1 个答案:

答案 0 :(得分:14)

因为as operator强制转换之前执行检查。如果类型不能相互转换,那么它只返回 null 并避免{{1 }}

当您尝试执行显式强制转换时,您会收到异常,因为在第二次调用中,您将字符串传递给不可转换为InvalidCastException的方法