【问题标题】:Declare Var in If Statement [duplicate]在 If 语句中声明 Var [重复]
【发布时间】:2021-03-04 19:18:37
【问题描述】:

是的,我知道有很多其他线程可能有相同的问题......但我还是不明白。

我正在通过 Visual Studio 用 C# 编写代码,并希望制作菜单之类的东西,以便您可以选择不同的选项...取决于您选择的选项,变量会改变。

但重要的是只有一个变量,所以当用户选择一个选项时,变量会发生变化。

类似这样的:

stt:
string m = Console.ReadLine();
Console.Clear();
int c = Convert.ToInt32(m);
if (c == 1)
{
  var ttt = "one";
}
if (c == 2)
{
  var ttt = "two";
}
else {
  goto stt;
}
Console.WriteLine("" + ttt);
Console.ReadKey();

我总是得到错误

名称'ttt'在当前上下文中不存在

所以我必须在 if 语句之外声明 var...但是如何??

【问题讨论】:

  • 请查看变量范围和代码块,this 可能会对您有所帮助。
  • 我强烈建议您不要使用goto,而是尝试使用循环和 if 语句来编写代码。
  • @juharr 另一方面,代码看起来是使用某种工具使用随机变量名称生成的——在这种情况下,goto 可能没问题...将一些自定义语言交叉编译成非常精简的 C# 版本在去一些较低级别的目标之前是我的选择......(不是 100% 认真的 cmets)
  • 也应该是else if(c == 2),否则当c 为1 时,它仍会使用goto 进入else

标签: c# if-statement variables


【解决方案1】:

通过写作..

string ttt;

..在第一个 if 之上。你不能在 if 上面写var ttt;,因为它没有声明类型(而且你没有提供一个值,所以编译器无法推断类型),所以你必须给出类型(字符串)当你声明名称

如果您这样做,则必须删除 ifs 中的 vars(但留下例如 ttt = "one"),这样您就不会最终声明另一个具有相同名称的变量

【讨论】:

  • im 使用 Leaf.xNet 编码,所以它必须是“Var”,我不能使用字符串:(
  • 既然如此,你必须在第一个 if, then 上面写上var ttt = ""。下次,如果有诸如“不得使用单词字符串”之类的限制,您应该在问题中提及它们,而不是在 cmets 中进行回答。另外,你自己使用字符串然后你说string m = Console.ReadLine()所以我不太确定你的“不能使用string规则甚至意味着......”
【解决方案2】:

它的快捷方式是:

stt:
string m = Console.ReadLine();
string ttt;
Console.Clear();
int c = Convert.ToInt32(m);
if (c == 1)
{
ttt = "one";
}
if (c == 2)
{
ttt = "two";
}
else 
{
goto stt;
}
Console.WriteLine("" + ttt);
Console.ReadKey();

为什么?称为变量范围的概念。在您的示例中,ttt 仅在 if 语句或 else 语句中创建,因此不会超出该语句的范围。为了在这些有限范围之外解决ttt,必须将其声明为更高。

离题 - goto。请尝试使用循环或条件。

【讨论】:

  • im 使用 Leaf.xNet 编码,所以它必须是“Var”,我不能使用字符串 :( ...但我会查找循环!
  • @Crussy 你可以做var ttt = c == 1 ? "one" : c == 2 ? "two" : null; 然后if(ttt == null) goto stt; 但我不知道Leaf.xNet 是什么或者它为什么不允许你使用string 如果它限制了我的建议也可能不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-26
  • 2014-05-12
  • 1970-01-01
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多