【问题标题】:Explain this type of cast?解释这种类型的演员表?
【发布时间】:2019-12-10 13:53:58
【问题描述】:

我正在学习铸造和转换技术,我以为我已经掌握了它,直到我遇到了这个。 我知道这是一种将整数除以小数的方法,但是有人可以简单地分解它的工作原理吗?似乎无法理解这种类型的演员阵容。谢谢

int value1 = 12;
decimal value2 = 6.2m;
float value3 = 4.3f;

int result1 = (int)((decimal) value1 / value2);

输出:

Result1 = 1 

【问题讨论】:

  • 小数转换是多余的,因为value2 已经是小数了
  • 它将value1 转换为decimal 并将value1 / value2 的结果转换为int。你能详细说明你卡在哪里了吗?
  • @BiesiGrr 但value1 不是。
  • @JohnathanBarclay:由于 value2 是十进制,value1 将自动转换为十进制 - 所以显式转换为十进制是多余的
  • @JohnathanBarclay (int / decimal) 类型为 decimal

标签: c# casting


【解决方案1】:

让我们从重要的事情开始。将 value1 转换为 decimal 已过时,您会从以下位置得到完全相同的结果:

int result1 = (int)(value1 / value2);

您可以通过执行以下操作查看 not 转换为 int 的结果:

var result1 = (value1 / value2);
Console.WriteLine(result1.GetType());

结果:System.Decimal

如果您尝试将其直接分配给int,您会得到

无法将类型“十进制”隐式转换为“整数”。存在显式转换(您是否缺少演员表?)

所以您需要明确decimal 转换为int 以将其分配给result1

【讨论】:

  • 即使没有十进制转换也能得到相同结果的原因是编译器会自动为您完成。见here
  • @BiesiGrr compiler automatically does it for you,是的,但是恕我直言,我们应该处理这个问题。
  • 这是微软为挑战 IMO 提供的解决方案,我认为不需要使用小数转换,只是想澄清一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-09
  • 1970-01-01
  • 2017-12-03
  • 2019-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多