如果方法中的陈述

时间:2013-11-12 16:00:28

标签: c# variables if-statement scope

我在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'是我遇到问题的那个。

9 个答案:

答案 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);
}
  • 变量的定义和变量的使用必须发生在用大括号{}定义的同一范围内。
    因此,你可以在整个方法情绪中使用m,但在这种情况下不能超出方法情绪。
  • 如果,如果您想先检查某些内容并且只有在结果为假的情况下才会派上用场,那么您希望检查其他内容作为后备。