我在C#中有一个变量集,它根据选择的If语句而改变。
但是当我尝试将Console.WriteLine变量告诉我变量在当前上下文中不存在时,有人可以帮助我吗?
public void mood()
{
var unhappiness = Hunger + Boredom;
if (unhappiness < 5)
{
string m = "Happy";
}
if (unhappiness <= 5 && unhappiness <= 10)
{
string m = "Okay";
}
if (unhappiness <= 11 && unhappiness <= 15)
{
string m = "Frustrated";
}
if (unhappiness <= 16)
{
string m = "Mad";
}
Console.WriteLine(m);
}
变量'm'是我遇到问题的那个。
答案 0 :(得分:3)
此:
{
}
将变量放在该范围内,因此它不会在它之外可用。这就是为什么你可以像你刚才那样声明4个名为m
的变量。每个m
都是一个不同的人,在它的小支架世界里。
我想你可能想事先声明:
string m="";
if (unhappiness < 5)
{
m = "Happy";
}
if (unhappiness <= 5 &&
unhappiness <= 10)
{
m = "Okay";
}
if (unhappiness <= 11 &&
unhappiness <= 15)
{
m = "Frustrated";
}
if (unhappiness <= 16)
{
m = "Mad";
}
答案 1 :(得分:2)
你需要在方法声明之后声明字符串m:
public string mood()
{
var unhappiness = Hunger + Boredom;
string m = string.Empty;
if (unhappiness < 5)
{
m = "Happy";
}
if (unhappiness <= 5 &&
unhappiness <= 10)
{
m = "Okay";
}
if (unhappiness <= 11 &&
unhappiness <= 15)
{
m = "Frustrated";
}
if (unhappiness <= 16)
{
m = "Mad";
}
return m;
答案 2 :(得分:1)
在if语句之前定义字符串M. 如果在var unhappiness之后初始化它,并将其设置在if语句中。 你可以在if语句中定义字符串m,但是当它们结束时,字符串m也会消失。
答案 3 :(得分:1)
请改为尝试:
public void mood()
{
var unhappiness = Hunger + Boredom;
string m = string.Empty;
if (unhappiness < 5)
{
m = "Happy";
}
if (unhappiness >= 6 && unhappiness <= 10)
{
m = "Okay";
}
if (unhappiness >= 11 && unhappiness <= 15)
{
m = "Frustrated";
}
if (unhappiness >= 16)
{
m = "Mad";
}
Console.WriteLine(m);
}
问题是m
是在if
语句中定义的,它的范围仅限于该语句。
答案 4 :(得分:0)
在编写时,变量m
仅存在于每个if
语句的范围内。
您应该在方法的全局范围内声明m
:
public void mood()
{
string m = "default mood";
// ...
}
这将使所有子范围(由大括号分隔)可用,包括每个if
语句。
在您最初编写的代码中,每次在不同的范围内编写string m
时,都会声明一个名为m
的新变量。每次到达范围的末尾时,该变量都会被销毁。因此,当您进入WriteLine
语句时,m
实际上不存在。
答案 5 :(得分:0)
public void mood()
{
var unhappiness = Hunger + Boredom;
string m;
if (unhappiness < 5)
{
m = "Happy";
}
if (unhappiness <= 5 &&
unhappiness <= 10)
{
m = "Okay";
}
if (unhappiness <= 11 &&
unhappiness <= 15)
{
m = "Frustrated";
}
if (unhappiness <= 16)
{
m = "Mad";
}
Console.WriteLine(m);
答案 6 :(得分:0)
字符串m在内部定义你的if子句。此外,您不能从您的方法返回一个字符串,所以我改变了:)
试
public string mood()
{
var unhappiness = Hunger + Boredom;
string m = string.Empty;
if (unhappiness < 5)
{
m = "Happy";
}
// etc
return m;
}
答案 7 :(得分:0)
m
不存在。这就是为什么你不能打印它或做任何事情。它不存在。没有m
这样的变量。
在一些内部范围中,碰巧有几个变量称为m
。但只要他们被定义的区块被退出,它们就会消失。现在他们属于一个无法回归的过去。他们的记忆像垃圾收集海洋中的水滴一样飘散。
答案 8 :(得分:0)
要解决您的问题,您可以执行以下操作:
public void mood()
{
var unhappiness = Hunger + Boredom;
string m = "Unknown";
if (unhappiness < 5)
{
m = "Happy";
}
else if (unhappiness >= 5 && unhappiness <= 10) // >= 5 not <= 5
{
m = "Okay";
}
else if (unhappiness > 11 && unhappiness <= 15) // > 10 or >= 11 not <= 11
{
m = "Frustrated";
}
else if (unhappiness >= 16) // assume it should be enything else
{
m = "Mad";
}
Console.WriteLine(m);
}