C# 变量不';你不认识以前的转换吗?

C# 变量不';你不认识以前的转换吗?,c#,C#,我正在做一个控制台应用程序,用任意公式计算体重指数。问题在于开关(索引),Visual Studio一直告诉我开关不能使用double,即使我已经将索引转换为int。简单地使用Convert.ToInt32(索引)也不起作用。我错过了什么 bool loop = true; int suly; double magassag; double index; string valasz; while (

我正在做一个控制台应用程序,用任意公式计算体重指数。问题在于开关(索引),Visual Studio一直告诉我开关不能使用double,即使我已经将索引转换为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;

你不能在一个开关中使用double。指数仍然是双倍的

index=Convert.ToInt32(索引)

这会将index的double值转换为int。然后将其指定给index(它是double),后者会隐式转换回double

intfoo=Convert.ToInt32(索引)
可以工作

甚至
开关(转换为32(索引))


请注意: 1) 当需要变量时,应该声明它们。例如,
suly
存在于of main中,而它只需要在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索引的数据类型是double。这就是为什么会出现此错误

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

switch(Convert.ToInt32(index))

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

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

无论如何,作为一个解决方案,我同意Praveen Paulose的观点

switch(Convert.ToInt32(index))

索引
声明为
双索引;
。将其更改为
int index;

    bool loop = true;
    int suly;
    double magassag;
    int index;  // not double 
    string valasz;
否则,赋值将把由
Convert.ToInt32()
生成的
int
值再次提升为
double
,从而产生您看到的错误。另一种解决方案是完全丢弃
索引,只在需要的地方进行转换:

    switch( Convert.ToInt32(index))

只需将索引转换为int开关((int)index)
case(6-10):
case-4:
,可能不是您想要的。这应该是
int
而不是
double
;)啊,我的印象是它也会转换变量本身。嗯,有很多东西要学。谢谢大家:)@chrisha!哦,天哪,这是唯一一件不会出错的事。不,这样问比较容易。显然:——)