我这里有两个代码段,第一个产生错误,但第二个工作。为什么呢?
public static Vector3? GetRayPlaneIntersectionPoint(Ray ray, Plane plane)
{
float? distance = ray.Intersects(plane);
return distance.HasValue ? ray.Position + ray.Direction * distance.Value : null;
}
Give:无法确定条件表达式的类型,因为''之间没有隐式转换。和' Microsoft.Xna.Framework.Vector3'
但是没有三元运算符的以下片段工作正常。
public static Vector3? GetRayPlaneIntersectionPoint(Ray ray, Plane plane)
{
float? distance = ray.Intersects(plane);
if (distance.HasValue)
return ray.Position + ray.Direction * distance.Value;
else
return null;
}
答案 0 :(得分:1)
你的第一个参数是Vector3类型(不是Vector3?)。由于null不是Vector3的有效值,因此会出现错误。
将行更改为:
float? distance = ray.Intersects(plane);
return distance.HasValue ? (Vector3?)(ray.Position + ray.Direction * distance.Value): null;
你需要明确地将三元组的左侧投射到Vector3吗?它的工作原理。第二个代码段有效,因为Vector3
可以隐式转换为Vector3?
。在三元组中,这种演员阵容不会发生,所以你必须明确地进行演绎。