你如何在C#中输入用户整数?

时间:2016-12-20 23:19:10

标签: c#

我是C#的新手,我正在尝试使用用户整数输入。但是我得到了这个错误:

  

名为Test'的局部变量不能在此范围内声明,因为它会给Test提供不同的含义,它已在父或当前'范围内用于表示其他内容

这是我的代码

using System;
    class MainClass {
      public static void Main (string[] args) {
        int Test = Console.ReadLine();
        int Integer;
        if (int.TryParse(Test, out Integer))
        {
          int Test = Convert.ToInt32(); 
        }
        else
        {
        Console.WriteLine("::INVALID::")
        }
      }
    }

如果有人能提供帮助,那将会受到赞赏。

5 个答案:

答案 0 :(得分:3)

b您的代码中存在几个问题。

你在第四行

int Test = Console.ReadLine();

Console.ReadLine()不会返回int,而是 string

string Test = Console.ReadLine();

名称Test不是非常具有描述性,也违反了惯例,即局部变量应以小写字母开头。所以我们可以进一步改进这条线:

string input = Console.ReadLine();

由于C#3我们也有var形式的隐式类型 - 由于这个原因,编译器能够自动将var替换为表达式右侧的值类型。在这种情况下,string。所以你可以把这一行写成以下内容。

var input = Console.ReadLine();

正如@ PMV所提到的那样,将string留在那里而不是var会带来更好的可读性,因为右侧的返回类型并不清楚方法的名称。

下一行再次违反了变量命名约定,int valueint number会更好。对于来自不同语言的许多开发人员(如Java),Integer也可能被误认为是类型名称。请注意,我们不能在这里使用var,因为没有右侧(没有赋值给变量),因此编译器无法识别类型。

到现在为止,错误消息已消失,因为我们更改了Test变量的名称。您收到的错误告诉您,您已在内部范围内(在第一个if语句分支内)重新声明了具有相同名称的变量。这在C#中是不允许的,因为外部范围变量在内部块中是可见的。

在第一个if块内你也试图转换为int,但这是一个无效的语句,因为你给方法没有输入,并且在使用{{{}后你已经有了解析后的数字1}}

TryParse

答案 1 :(得分:0)

修正语法错误

void Main()
{
    var TestString = Console.ReadLine();
    int Integer;
    if (int.TryParse(TestString, out Integer))
    {
        int Test = Integer; // maybe you dont need this
    }
    else
    {
        Console.WriteLine("::INVALID::");
    }
}

答案 2 :(得分:0)

您已将用户输入转换为integer变量中的整数。

    if (int.TryParse(Test, out Integer))
    {
      //Do whatever you want to do with integer here
    }

此外,将变量Test的类型更改为字符串

string Test = Console.ReadLine();

答案 3 :(得分:0)

尝试使用另一个变量名而不是Test。

int Test = Console.ReadLine();

int IntegerTest = Console.ReadLine();而不是

答案 4 :(得分:0)

您声明变量Test两次。一次在4线,在8线第二。 你用过函数Convert.ToInt32();没有争论,但TryParse(如果它是可行的)改变out int参数的值 - 你不需要使用Convert.ToInt32 ...;) Integer是类型名称。您应该为变量使用其他名称。

  

到Console.ReadLine();

返回字符串,而不是int ...

 string Test = Console.ReadLine();
    int res;
    if (!int.TryParse(Test, out res))
    {
      Console.WriteLine("::INVALID::")
    }