我是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::")
}
}
}
如果有人能提供帮助,那将会受到赞赏。
答案 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 value
或int 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::")
}