为什么必须写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
?当我尝试这样做时,我会遇到一个例外。
因为as operator
在强制转换之前执行检查。如果类型不能相互转换,则只返回null并避免InvalidCastException
。
当您尝试执行显式强制转换时,会出现异常,因为在第二次调用中,您将向无法转换为int?
的方法传递一个字符串