【问题标题】:Name age does not exist in the current context当前上下文中不存在姓名年龄
【发布时间】:2014-04-15 19:12:47
【问题描述】:

我的任务是在 Visual Studio 上用 C# 编写一个简单的程序,从控制台读取您的出生日期,打印您现在的年龄和十年后的年龄。

我找到了一个 Microsoft 教程并决定使用它,但它出错了。教程如下:http://channel9.msdn.com/Series/Twenty-C-Questions-Explained/14

我的任务没有完成,我看到以下错误:'The name age does not exist in the current context'

namespace AgeAfterTenYears
{
    class AgeAfterTenYears
    {
        static void Main()
        {
            Console.WriteLine("Enter birthdate - DD/MM/YYYY");
            string birthdate = Console.ReadLine();
            DateTime bd = Convert.ToDateTime(birthdate);
            DateTime curDate = DateTime.Today;
            if (bd > curDate)
            {
                Console.WriteLine("Birthdate must be equal to or before today");
            }
            else
            {
                int age = curDate.Year - bd.Year;
            }

            if (bd.Month > curDate.Month)
            {
                age--;
            }
            Console.WriteLine("You are: {0} years old", age);
        }
    }
}

我为这项任务找到了不同的解决方案,但我真的很想了解我的问题所在。可能这有点愚蠢,但我在第一节课后就这样做了......

任何帮助将不胜感激。

【问题讨论】:

    标签: c# scope calculator


    【解决方案1】:

    您在else 语句中声明age

    else
    {
        int age = curDate.Year - bd.Year;
    }
    

    这意味着 else 语句之外的代码无法“看到”变量 age。超出范围。

    您应该将变量声明移到第一个 if 语句上方。

    【讨论】:

      【解决方案2】:

      您可能应该如下修改您的else 部分:

      else
      {
          int age = curDate.Year - bd.Year;
          if (bd.Month > curDate.Month)
          {
              age--;
          }
          Console.WriteLine("You are: {0} years old", age);
      }
      

      【讨论】:

      • 很多类似的答案,但这是我看到的第一个无法继续针对无效生日进行月份比较的答案。
      【解决方案3】:

      age 此处不存在:

      if (bd.Month > curDate.Month)
      {
          age--;
      }
      

      如果你想访问int age,应该在if-else之外声明它。

      int age = 0;
      
      if (bd > curDate)
      {
          Console.WriteLine("Birthdate must be equal to or before today");
      }
      else
      {
          age = curDate.Year - bd.Year;
      }
      
      if (bd.Month > curDate.Month)
      {
          age--;
      }
      

      【讨论】:

      • 感谢您的建议。我已经尝试过了,但现在我得到了一个不同的错误:'不能在这个范围内声明一个名为'age'的局部变量,因为它会给'age'赋予不同的含义,它已经在'父级或当前'中使用范围来表示其他东西'。
      【解决方案4】:

      age 移出else 块并为其分配一个默认值:

      int age = 0;
      
      if(...)
      {
      ...
      }
      else
      {
      ...
      }
      

      【讨论】:

        【解决方案5】:

        变量age 仅在else 块中声明,您尝试在下一个未声明的if 块中使用它。

        【讨论】:

          【解决方案6】:
              using System;
          
              namespace AgeAfterTenYears
              {
              class AgeAfterTenYears
              {
              static void Main()
              {
                  var age = 0;
                  Console.WriteLine("Enter birthdate - DD/MM/YYYY");
                  string birthdate = Console.ReadLine();
                  DateTime bd = Convert.ToDateTime(birthdate);
                  DateTime curDate = DateTime.Today;
                  if (bd > curDate)
                  {
                      Console.WriteLine("Birthdate must be equal to or before today");
                  }
                  else
                  {
                      age = curDate.Year - bd.Year;
                  }
                  if (bd.Month > curDate.Month)
                  {
                     age = --set your age here//curDate.Year - bd.Year
                  }
                  Console.WriteLine("You are: {0} years old", age);
              }
          
          }
          

          【讨论】:

          • 我已经尝试了您的建议,但又遇到了另一个错误:“无法在此范围内声明名为“age”的局部变量,因为它会给已使用的“age”赋予不同的含义在“父或当前”范围内表示其他内容。我不知道为什么会出错。
          • 不可能,也许你在两个地方声明了年龄
          • 整个代码写在我的问题描述中。现在我刚刚添加了 var age = 0;一开始。
          • 你不明白Scope这个词是什么意思,当在if语句之外声明它在条件语句之外时,你看不到年龄
          • 我已经像你说的那样声明了它,但在 else 声明中我留下了'int age = curDate.Year - bd.Year;'当它应该只是'age = curDate.Year - bd.Year;'。感谢您的帮助。
          猜你喜欢
          • 1970-01-01
          • 2013-10-02
          • 2014-04-22
          • 2017-06-17
          • 2015-09-11
          • 1970-01-01
          • 1970-01-01
          • 2022-12-18
          相关资源
          最近更新 更多