三元运算符与Vector3无法正常工作

时间:2014-04-29 21:56:04

标签: c# xna

我这里有两个代码段,第一个产生错误,但第二个工作。为什么呢?

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;
}

1 个答案:

答案 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?。在三元组中,这种演员阵容不会发生,所以你必须明确地进行演绎。