C# 无法访问变量-上下文之外

C# 无法访问变量-上下文之外,c#,C#,我整天都在试图通过搜索和阅读来解决这个问题,我知道这一定很简单,但在底部的最后一段代码中,我试图创建打印出输入内容的方法,我不断遇到这个错误 错误CS0103当前上下文中不存在名称“student1” 错误CS0103当前上下文中不存在名称“teacher1” 错误CS0103当前上下文中不存在名称“course1” 如果你能给我指出正确的方向或至少给我一个暗示,我将永远感激你 using System; using System.Collections.Generic; using Syste

我整天都在试图通过搜索和阅读来解决这个问题,我知道这一定很简单,但在底部的最后一段代码中,我试图创建打印出输入内容的方法,我不断遇到这个错误

错误CS0103当前上下文中不存在名称“student1”
错误CS0103当前上下文中不存在名称“teacher1” 错误CS0103当前上下文中不存在名称“course1”

如果你能给我指出正确的方向或至少给我一个暗示,我将永远感激你

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace StudentInformation
{
class Program
{
    static void Main(string[] args)
    {

        Console.WriteLine("What would you like to do? Please choose a number: ");
        Console.WriteLine("");
        Console.WriteLine("1. Enter Student Information");
        Console.WriteLine("2. Enter Teacher Information");
        Console.WriteLine("3. Enter Class Information");
        Console.WriteLine();
        int menuOne = Convert.ToInt32(Console.ReadLine());

        if (menuOne == 1)
        {
            GetStudent();
        }
        else if (menuOne == 2)
        {
            GetTeacher();
        }
        else if (menuOne == 3)
        {
            GetClass();
        }
        else
        {
            Console.WriteLine("Incorrect input. Exiting application.");
            Console.ReadLine();
        }

    }


    public class Student
    {
        public string fName { get; set; }
        public string lName { get; set; }
        public string bDate { get; set; }
    }

    public class Teacher
    {
        public string tFName { get; set; }
        public string tLName { get; set; }
        public string tClass { get; set; }
    }

    public class Course
    {
        public string cName { get; set; }
        public string cSubject { get; set; }
        public string cStart { get; set; }
    }

    static void GetTeacher()
    {
        Teacher teacher1 = new Teacher();

        Console.WriteLine("Enter teacher's first name: ");
        teacher1.tFName = Console.ReadLine();
        Console.WriteLine("Enter teacher's last name: ");
        teacher1.tLName = Console.ReadLine();
        Console.WriteLine("Enter teacher's class name: ");
        teacher1.tClass = Console.ReadLine();


    }

    static void GetStudent()
    {
        Student student1 = new Student();

        Console.WriteLine("Enter student's first name: ");
        student1.fName = Console.ReadLine();
        Console.WriteLine("Enter student's last name: ");
        student1.lName = Console.ReadLine();
        Console.WriteLine("Enter student's birthdate: ");
        student1.bDate = Console.ReadLine();
        PrintStudent();

    }

    static string GetClass()
    {
        Course course1 = new Course();

        Console.WriteLine("Enter class name: ");
        course1.cName = Console.ReadLine();
        Console.WriteLine("Enter class subject: ");
        course1.cSubject = Console.ReadLine();
        Console.WriteLine("Enter class start time: ");
        course1.cStart = Console.ReadLine();
        return course1.cName;
    }

    static void PrintStudent()//Going to add PrintTeacher and PrintCourses as well after I figure this out
    {
        //string student1.fName = GetStudent();
        // Console.WriteLine(fName);
        Console.WriteLine("{0} and {1} are in {2}", student1.fname, teacher1.tFName, course1.cName);
    }

}
}

所有变量
course1
student1
teacher1
分别是方法
GetClass
GetStudent
GetTeacher
的本地变量

如果要这样访问它们,需要将它们设置为类变量。但是,用以下内容替换您的详细说明要简单得多:

 Console.WriteLine("{0} and {1} are in {2}", GetStudent(), GetTeacher(), GetClass());
但是,这不起作用,因为“Get”方法需要用户输入。您需要将保存用户输入的变量转换为类变量

您似乎已经创建了返回这些值的方法,但是没有使用它们,但是只有
GetClass
方法返回值。
GetTeacher
方法从用户处读入值,然后对其不做任何处理

最后从
GetStudent
调用您的
PrintStudent
方法。如果要使用该结构,则需要将学生姓名传递到方法中:

static void PrintStudent(string studentName)
{
    Console.WriteLine(studentName); // Plus formatting
}
然而,如果你想打印出类和教师,你必须从根本上改变你的代码结构,否则你可能会得到无限递归,print方法调用“Get”方法,后者调用print方法


您需要决定代码的结构,然后保持一致。首先用普通语言写出逻辑——这将帮助您确定实际需要的方法和结构。然后,您可以将其转换为伪代码并最终编码。

您的所有变量
course1
student1
teacher1
分别是方法
GetClass
GetStudent
GetTeacher
的本地变量

如果要这样访问它们,需要将它们设置为类变量。但是,用以下内容替换您的详细说明要简单得多:

 Console.WriteLine("{0} and {1} are in {2}", GetStudent(), GetTeacher(), GetClass());
但是,这不起作用,因为“Get”方法需要用户输入。您需要将保存用户输入的变量转换为类变量

您似乎已经创建了返回这些值的方法,但是没有使用它们,但是只有
GetClass
方法返回值。
GetTeacher
方法从用户处读入值,然后对其不做任何处理

最后从
GetStudent
调用您的
PrintStudent
方法。如果要使用该结构,则需要将学生姓名传递到方法中:

static void PrintStudent(string studentName)
{
    Console.WriteLine(studentName); // Plus formatting
}
然而,如果你想打印出类和教师,你必须从根本上改变你的代码结构,否则你可能会得到无限递归,print方法调用“Get”方法,后者调用print方法



您需要决定代码的结构,然后保持一致。首先用普通语言写出逻辑——这将帮助您确定实际需要的方法和结构。然后,您可以将其转换为伪代码并最终进行编码。

它们是局部变量…此代码需要清除。。到处都是!!您应该避免使用诸如
fName
cFName
之类的神秘ID。在这两种情况下,一个普通的旧的
FirstName
会更好。将参数添加到最后一个函数PrintStudent(Student student1,teacher1,course1)。。到处都是!!您应该避免使用诸如
fName
cFName
之类的神秘ID。在这两种情况下,一个普通的老名字将更好。为最后一个函数PrintStudent(学生1、教师1、课程1)添加参数。你需要调查他是否也必须更改他的getstudent方法,否则你将陷入无休止的循环@乔什·史蒂文斯——没有注意到这一点。还有所有的空格,所以它们不会返回值。这不是一个真正的代码问题,更多的是一个关于变量的概念问题Scope@ChrisF你提供的代码对他的任务没有任何作用?他不想返回整个类,他只想控制台该类的日志属性。。i、 e.name etc+他的方法您的调用do控制台记录在其中,因此他的应用程序现在将与您的修复程序运行不同。他将不得不更改他的getstudent方法,否则您将陷入无休止的循环@乔什·史蒂文斯——没有注意到这一点。还有所有的空格,所以它们不会返回值。这不是一个真正的代码问题,更多的是一个关于变量的概念问题Scope@ChrisF你提供的代码对他的任务没有任何作用?他不想返回整个类,他只想控制台该类的日志属性。。i、 e.name etc+他的方法您的调用do控制台记录在其中,因此他的应用程序将在您的修复程序中运行。