变量无法识别以前的转换?

时间:2015-04-18 22:02:01

标签: c#

我正在做一个控制台应用程序,用于使用任意公式练习计算BMI。问题在于switch(索引),Visual Studio一直告诉我switch不能使用double,即使我已经将index转换为int。简单地使用Convert.ToInt32(索引)也不起作用。我在这里缺少什么?

        bool loop = true;
        int suly;
        double magassag;
        double index;
        string valasz;

        while (loop)
        {
            Console.WriteLine("Add meg a sulyodat");
            suly = int.Parse(Console.ReadLine());

            Console.WriteLine("Add meg a magassagodat");
            magassag = double.Parse(Console.ReadLine());
            magassag = magassag / 100;


            index = suly / Math.Pow(magassag, 2);
            index = Math.Round(index, 2);



            Console.WriteLine(index + " a testtomeg indexed");
            index = Convert.ToInt32(index);

            switch (index)
            {
                case (0-5):
                    Console.WriteLine("asd1");
                    break;
                case (6-10):
                    Console.WriteLine("asd");
                    break;
                default:
                    Console.WriteLine("asd3");
                    break;
            }

            Console.WriteLine("Újra? igen/nem");
            valasz = Console.ReadLine();
            if (valasz == "igen")
                loop = true;
            else loop = false;

4 个答案:

答案 0 :(得分:2)

您无法在交换机中使用double。指数仍是双倍

index = Convert.ToInt32(index);

这会将index的double值转换为int。然后将其分配给index(这是一个double),它将隐式转换返回到double。

int foo = Convert.ToInt32(index)可行

甚至switch(Convert.ToInt32(index))


只是一些说明: 1)您应该在需要时声明变量。例如,suly存在于main的scope中,当它只需要在while循环的范围内时。

2)你的循环变量正在执行break关键字已经执行的操作

3)Convert.ToInt32已经提供了舍入(这是使其与强制转换((int)index)不同的事情之一。

4)像magassag = double.Parse(Console.ReadLine()); magassag = magassag / 100;这样的事情很容易在一个陈述中完成,而且可能会更清楚一些。

5)情况(0-5)表示情况(-5),情况(6-10)表示-4。您希望使用if语句if( foo >= 0 || foo <= 5)或使用switch statement fallthrough

答案 1 :(得分:1)

调试程序总是一个好主意。 在这些情况下,Visual Studio可以为您提供很多帮助。 在计算索引变量后设置断点。

在手表窗口中,您可以检查类型。

enter image description here

无论如何作为解决方案我同意Praveen Paulose

switch(Convert.ToInt32(index))

答案 2 :(得分:0)

索引的数据类型是double。这就是你得到这个错误的原因。

尝试传递一个int,如下所示

switch(Convert.ToInt32(index))

答案 3 :(得分:-1)

index被声明为double index;。将其更改为int index;

    bool loop = true;
    int suly;
    double magassag;
    int index;  // not double 
    string valasz;

否则,分配会将int生成的Convert.ToInt32()值再次提升回double,从而产生您看到的错误。另一种解决方案是完全抛弃index,只需在需要的地方进行转换:

    switch( Convert.ToInt32(index))