Saya tidak dapat mengakses properti objek student1 yang telah dibuat dalam metode Main() dari kelas Program dalam metode ClassOperations() dari kelas yang sama. Saya terus mendapatkan

kesalahan CS0103: Nama 'siswa1' tidak ada dalam konteks saat ini

using System;

namespace Trials
{
    public class Students
    {
      public int maths;
      public int science;
      public int english;
      public int secondLang;
      public int socialScience;
      public string name;

      public Students(int[] inputMarks)
      {
        maths = inputMarks[0];
        science = inputMarks[1];
        english = inputMarks[2];
        secondLang = inputMarks[3];
        socialScience = inputMarks[4];
      }
    }

    public class Program
    {
      static void Main(string[] args)
        {
            Console.WriteLine("Enter your name: ");
            string inputName = Console.ReadLine();
            int[] marks = new int[5];

            Console.WriteLine("Enter the maths marks: ");
            marks[0] = int.Parse(Console.ReadLine());

            Console.WriteLine("Enter the Science marks: ");
            marks[1] = int.Parse(Console.ReadLine());

            Console.WriteLine("Enter the English marks: ");
            marks[2] = int.Parse(Console.ReadLine());

            Console.WriteLine("Enter the Second language marks: ");
            marks[3] = int.Parse(Console.ReadLine());

            Console.WriteLine("Enter the Social Science marks: ");
            marks[4] = int.Parse(Console.ReadLine());

            Students student1 = new Students(marks);

            student1.name = inputName;
            ClassOperations();
        }

      static void ClassOperations()
      {
          Console.WriteLine("Enter input :");
          int input = int.Parse(Console.ReadLine());

          switch (input)
          {
            case 1:
              Console.WriteLine(student1.name);
              break;
            case 2:
              Console.WriteLine(student1.maths);
              break;
            case 3:
              Console.WriteLine(student1.science);
              break;
            case 4:
              Console.WriteLine(student1.english);
              break;
            case 5:
              Console.WriteLine(student1.secondLang);
              break;
            case 6:
              Console.WriteLine(student1.socialScience);
              break;
        }
      }
    }
}
0
ZanderKraig 3 Mei 2020, 11:58

1 menjawab

Jawaban Terbaik

Kesalahan memberi tahu Anda masalahnya: variabel lokal (student1) yang dideklarasikan dalam suatu metode (Main) tidak dapat diakses dalam metode lain (ClassOperations, konteks saat ini). Anda memiliki beberapa opsi:

  • (statis) properti
  • bidang (statis)
  • parameter metode

Dalam contoh ini, opsi "terbaik" adalah meneruskan variabel student1 Anda sebagai parameter ke metode ClassOperations:

static void Main(string[] args) {
    // setup elided
    Students student1 = new Students(marks);
    student1.name = inputName;  
    // pass as parameter    
    ClassOperations(student1);
} 

static void ClassOperations(Students student) {
    // access value via new name "student" 
    Console.WriteLine(student.name);
}

Berdasarkan komentar Anda, inilah alternatif dengan bidang bisa terlihat seperti:

static Students student; //static field 
static void Main(string[] args) {
    // setup elided
    // initialize static field 
    student = new Students(marks);
    student.name = inputName;  
    ClassOperations();
} 

static void ClassOperations() {
    // access value via static field "student" 
    Console.WriteLine(student.name);
}
0
pinkfloydx33 3 Mei 2020, 10:12