C#,不能隐式转换类型`long'对'uint'

时间:2016-02-19 04:41:06

标签: c# unity3d

这有什么不对吗?我在前两行收到了错误。

bounds.xMin = (Mathf.FloorToInt (x / GridSize) * GridSize);
bounds.yMin = (Mathf.FloorToInt (y / GridSize) * GridSize);
bounds.xMax = bounds.xMin + GridSize;
bounds.yMax = bounds.yMin + GridSize;

bounds.xMinbounds.yMinxyGridSize都是uint类型。

1 个答案:

答案 0 :(得分:4)

您的所有变量均为uint,但Mathf.FloorToInt的返回类型为int

要将uint乘以int,C#会将两个操作数转换为long,因为它是唯一可以表示所有可能值的整数类型。此操作的结果也将是long

您需要将整个结果或至少Mathf.FloorToInt的结果投放到uint

来自C#语言规范:

  

对于二进制+, - ,*,/,%,&,^,|,==,!=,>,<,> =和< =运算符,操作数将转换为type T,其中T是int,uint,long和ulong中的第一个,它们可以完全表示两个操作数的所有可能值。然后使用类型T的精度执行操作,并且结果的类型是T