为什么必须写O AS INT并且可以';t写入(INT)O

本文关键字:INT 写入 AS 为什么 | 更新日期: 2023-09-27 18:00:25

我在Jon Skeet的书中发现了一个使用作为运算符和类型的例子,这允许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?当我尝试这样做时,我会遇到一个例外。

为什么必须写O AS INT并且可以';t写入(INT)O

因为as operator强制转换之前执行检查。如果类型不能相互转换,则只返回null并避免InvalidCastException

当您尝试执行显式强制转换时,会出现异常,因为在第二次调用中,您将向无法转换为int? 的方法传递一个字符串