使用Switch case或If else语句

时间:2014-05-21 11:12:45

标签: c# if-statement switch-statement nullable

我试图计算一些角度,取决于使用某些奇数轴的某些3d坐标(有时向下是+ ve,有时正确是-ve等)并且已经提出以下开关案例结构

    private double RobOrientX(double robY, double robZ)
    {
        double AngleX;

        switch (robY)
        {
            case robY>0:
                switch (robZ)
                {
                    case robZ>0:
                        AngleX = Math.Atan2(robZ,robY);
                        break;

                    case robZ<0:
                        AngleX = 360 + Math.Atan2(robZ, robY);
                        break;

                    case robZ=0:
                        AngleX = 0;
                        break;
                }
                break;

            case robY<0:
                switch (robZ)
                {
                    case robZ>0:
                        AngleX = 180 + Math.Atan2(robZ, robY);
                        break;

                    case robZ<0:
                        AngleX = 180 + Math.Atan2(robZ, robY);
                        break;

                    case robZ=0:
                        AngleX = 180;
                        break;
                }
                break;

            case robY=0:
                switch (robZ)
                {
                    case robZ>0:
                        AngleX = 90;
                        break;

                    case robZ<0:
                        AngleX = 270;
                        break;

                    case robZ=0:
                        AngleX = 0;
                        break;

                }
                break;
        }

        return AngleX;
    }

但是switch (robY)上有一个错误,说明一个开关表达式需要使用一个可以为空的类型,我认为它是双重类型。

switch (robZ)没有错误。我在这里缺少什么,或者我应该将它们全部更改为一系列If else语句?

非常感谢

1 个答案:

答案 0 :(得分:0)

这与可空值无关,偶然double不可为空(double?可以为空)。问题是在C#case语句中必须使用常量,而不是布尔测试。您可能只想使用if / else块。

if(robX > 0)
{
     //...
}
else if (robX < 0)
{
    //...
}
else if (robX == 0)
{
    //...
}
else
{
    // NaN etc?
}

不相关,但大多数数学函数(包括Math.Atan2)在弧度中说话 - 但你似乎是将它们与度数混合在一起。这将产生非常奇怪的结果。 180度是Math.PI弧度。