Получение информации из struct в другом методе, где она установлена ​​с помощью C # - PullRequest
0 голосов
/ 10 марта 2012

Итак, в основном моя проблема в том, что в моей программе есть метод, который устанавливает данные в структуре для студента, которая выглядит следующим образом:

public static void addingstudent(){
        student student;
        AddStudent details = new AddStudent();
        student.name = details.setName();
        student.course = details.setCourse();
        student.studentno = details.setStudentNumber();
        student.year = details.setYear();
        menu();         
    }

Класс AddStudent содержит несколько методов, чтобы попросить пользователя ввести Имя и т. Д. И вернуть их, например, в этом классе будет:

public static int setStudentNo(){
    Console.Write("Please enter Student Number: ");
    int StudentNo = int.Parse(Console.ReadLine());
    return StudentNo;
}

А потом я пытаюсь получить доступ к этим данным и отобразить их на экране с помощью:

public static void getstudent(){
        student student;
        student.displayDetails();
    }

, который просто отображает нулевые значения для всех переменных, однако, если я вызываю это после первой установки значений, которые отображаются правильно, наконец, структура выглядит следующим образом:

public struct student{

    public String name;
    public int studentno;
    public String course;
    public int year;

    public void displayDetails(){

        Console.WriteLine("Name: " + name);
        Console.WriteLine("Student Number: "+studentno);
        Console.WriteLine("Course: "+course);
        Console.WriteLine("Year: "+year);
    }

Ответы [ 2 ]

3 голосов
/ 10 марта 2012

Вы пользователь student student в addingstudent(), но еще student student в getstudent(), насколько я вижу ... вы не используете тот же объект ...

У вас может быть класс, который имеет структуру и две функции

class A
{
     studnet studnet;
     public static void addingstudent()
     {        
        AddStudent details = new AddStudent();
        student.name = details.setName(); 
        student.course = details.setCourse();
        student.studentno = details.setStudentNumber(); 
        student.year = details.setYear();  
        menu(); 
     } 

     public static void getstudent()
     {    
         student.displayDetails(); 
     } 
}

Затем просто создайте новый класс А и манипулируйте данными так, как вы хотите

0 голосов
/ 11 марта 2012

Во-первых, создавать изменяемые структуры - плохая идея, если данные изменчивы, вам действительно следует создать класс.

Кроме того, вы не передаете структуру в качестве параметра, например, в getstudent вы создаете новый объект ученика каждый раз, поэтому student.displayDetails(); показывает ноль, потому что вы не установили никакойсвойств студента, которого вы создали в строке перед вызовом.

    public static void getstudent()
    {
        Student student; // creates a new instance of the struct... 
        student.displayDetails(); // obviously student properties are null...
    }

На самом деле вы должны делать что-то вроде следующего.

public class Student
{
    public Student()
    {
       this.SetName();
       this.SetNumber();
       this.SetCourse()
       this.SetYear();
    }

    public override string ToString()
    {
        return string.Format(
                   "Name: {0}{4}Number: {1}{4}Course: {2}{4}Year: {3}{4}",
                    this.Name,
                    this.Number,
                    this.Course,
                    this.Year,
                    Environment.NewLine);
    }

    public void DisplayDetails()
    {
        Console.WriteLine(this.ToString());
    }

    public string Name { get; private set; }
    public string Number{ get; private set; }
    public string Course { get; private set; }
    public string Year { get; private set; }

    public static void SetName()
    {
      Console.WriteLine("Please enter Name: ");
      this.Name = Console.ReadLine();
    }

    public static void SetNumber()
    {
      Console.WriteLine("Please enter Number: ");
      this.Number = int.Parse(Console.ReadLine());
    }

    public static void SetCourse()
    {
      Console.WriteLine("Please enter Course: ");
      this.Course = Console.ReadLine();
    }

    public static void SetYear()
    {
      Console.WriteLine("Please enter Year: ");
      this.Year = int.Parse(Console.ReadLine());
    }
}

public class App
{
    public static void Main()
    {
       Student student1 = new Student(); // Create a student
       student1.DisplayDetails(); // show the details 

       student1.SetName(); // change the name
       student1.SetYear(); // change the year
       student1.DisplayDetails(); // show the new details 

       // etc...
    }
}
...