c# - 为什么一定要写O AS INT而不能写(INT)O

标签 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?可为空 = (int?)o?当我尝试这样做时,出现异常。

最佳答案

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

当您尝试执行 explicit 强制转换时出现异常,因为在第二次调用中您将字符串传递给无法转换为 int? 的方法/p>

关于c# - 为什么一定要写O AS INT而不能写(INT)O,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23302752/

相关文章:

c# - 为什么后台线程中的图形操作会阻塞主 UI 线程中的图形操作?

c# - 为特定的 GDI 设备上下文禁用抗锯齿

c# - 如何在 Xamarin.Forms 中使用 ShinyStartup?

c# - C++ 中的多播委托(delegate)

c# - 如何使Unity中的C#与Python通信

c# - 将 C++/CLI 桥接到 C# 时防止垃圾回收

c# - 初始化字符串的 Azure SQL Server CE 格式不符合从索引 0 开始的规范

c# - 如何为流创建 TCP 消息帧

c# - Microsoft 标准计算器中使用的变量类型

c# - Roslyn:将 using 语句添加到语法树