gpt4 book ai didi

c# - Convert.ToInt16 和 (Int16) 有什么区别

转载 作者:太空狗 更新时间:2023-10-29 20:58:37 35 4
gpt4 key购买 nike

我有以下一段代码

try
{
object s = new object();
s = 10;
Console.WriteLine("{0}", Convert.ToInt16(s));
Console.WriteLine("{0}", (Int16)s);
}
catch (InvalidCastException ex)
{
Console.WriteLine(ex.Message);
Console.ReadLine();
}

在此基础上我有很多问题..
1) Convert.ToInt16()和(Int16)是否都是拆箱操作
2)如果两者都与拆箱有关,那么为什么它们不同。因为上面的代码在编译Console.WriteLine("{0}", (Int16)s);行时出现了如下错误
错误:
指定的转换无效
3) 据我所知,(Int16) 是常规转换,Convert.ToInt16() 是类型安全转换。但是,是什么让这些在这里有所不同呢?也许这是一个愚蠢的问题,但我很困惑。请为我澄清这一点并纠正我的错误。

最佳答案

数字文字 10 被视为整数,更具体地说是 Int32。虽然您将变量键入为 object,但在幕后它仍然是整数。您只能将值类型直接取消装箱为其相同类型或该类型的可空版本。

例如这段代码:

int i = 10;
object o = i;
short j = (short)o;

不会执行,因为i的原始值不是short,是整数。您必须先拆箱为整数,然后才能转换为短整数。

short j = (short)(int)o;

Convert.ToInt16 回避了这个问题,它的方式是实现细节。但是,该方法有多个重载,可以接受多种类型,包括字符串,因此它等同于使用直接转换的代码。


编辑:我注意到我在这里混淆了术语,所以对于新手 C# 读者来说很清楚,名称 shortInt16 对于 16 位整数可以互换,名称 intInt32 对于 32 位整数也是如此。在 C# 中,shortint 分别是 .NET 类型 Int16Int32 的别名。

关于c# - Convert.ToInt16 和 (Int16) 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24027924/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com