-3
class Program
{
    public static void GetSchoolInfo()
    {
        string SchoolName,
               EnrollmentStatus,
               ColorOne,
               ColorTwo;

        Console.WriteLine("Please enter your school name: ");
        SchoolName = Console.ReadLine();
        Console.WriteLine("Please enter your Enrollment Status: ");
        EnrollmentStatus = Console.ReadLine();
        Console.WriteLine("Pleas enter one of your school's colors: ");
        ColorOne = Console.ReadLine();
        Console.WriteLine("Please enter the other school color: ");
        ColorTwo = Console.ReadLine();
    }
    static void Main(string[] args)
    {
        GetSchoolInfo();

        Console.ReadLine();

    }

私の目的は、これらの文字列を取得し、それらをすべて適切に出力するメソッドを作成することです。メソッドの外部で、SchoolName 文字列、またはその他の文字列を呼び出すことはできないようです。私は現在CSのバッハのために学校に通っているので、これは初心者の質問であることを許してください.

4

6 に答える 6

2

void を返す代わりに、main 内で使用できるクラスの新しいインスタンスを返します。

        public class SchoolInfo
        {
            public string SchoolName { get; set; }
            public string EnrollmentStatus { get; set; }
            public string ColorOne { get; set; }
            public string ColorTwo { get; set; }
        }

        public static SchoolInfo GetSchoolInfo()
        {
            string SchoolName,
                   EnrollmentStatus,
                   ColorOne,
                   ColorTwo;

            Console.WriteLine("Please enter your school name: ");
            SchoolName = Console.ReadLine();
            Console.WriteLine("Please enter your Enrollment Status: ");
            EnrollmentStatus = Console.ReadLine();
            Console.WriteLine("Pleas enter one of your school's colors: ");
            ColorOne = Console.ReadLine();
            Console.WriteLine("Please enter the other school color: ");
            ColorTwo = Console.ReadLine();

            return new SchoolInfo()
                {
                    SchoolName = SchoolName,
                    EnrollmentStatus = EnrollmentStatus,
                    ColorOne = ColorOne,
                    ColorTwo = ColorTwo
                };
        }


        private static void Main(string[] args)
        {
            SchoolInfo info = GetSchoolInfo();
            Console.WriteLine("You Entered School Name: "+info.SchoolName);
            Console.ReadLine();

        }
于 2013-02-05T00:51:41.113 に答える
1

これは、その範囲のためです。スコープは、変数が定義されている場所によって決定され、メソッド内の例で定義されています。それが彼らのスコープがあるところです。メソッドはすぐに範囲外になり、ローカル変数も範囲外になります。これらの変数にクラス外からアクセスしたい場合は、次のようにクラス変数として定義する必要があります。

class Program
{
    string SchoolName,
           EnrollmentStatus,
           ColorOne,
           ColorTwo;
public static void GetSchoolInfo()
{

    Console.WriteLine("Please enter your school name: ");
    SchoolName = Console.ReadLine();
    Console.WriteLine("Please enter your Enrollment Status: ");
    EnrollmentStatus = Console.ReadLine();
    Console.WriteLine("Pleas enter one of your school's colors: ");
    ColorOne = Console.ReadLine();
    Console.WriteLine("Please enter the other school color: ");
    ColorTwo = Console.ReadLine();
}
static void Main(string[] args)
{
    GetSchoolInfo();

    Console.ReadLine();

}
于 2013-02-05T00:47:52.667 に答える
1

こんにちは@Adam Marasが述べたように、スコープに含まれなくなった変数にアクセスしようとしています。関数内で変数を宣言すると、その変数はその関数内で生きて死んでいきます。つまり、関数の外部からアクセスできなくなります。

今解決策です。変数を保持し、メイン アプリケーション全体で使用するクラスを作成します。

以下はデモです。

これらはプログラミングの基礎であり、基礎を理解することは長い道のりです..頑張ってください

public class SchoolInfo
{
    /* two properties are defined as public to carry the data */
    public string NameOfTheSchool { get; set; }
    public string AddressOfTheAchool { get; set; }
}


class Program
{
    public static void GetSchoolInfo(SchoolInfo info)
    {
        info.NameOfTheSchool = "AA";
        info.AddressOfTheAchool = "BB";
    }

    static void Main()
    {
        // create the instance of the class
        SchoolInfo mySchoolInfo = new SchoolInfo();

        // pass it into GetSchoolInfo to collect the data
        GetSchoolInfo(mySchoolInfo);

        // print the value of the name of the school
        Console.WriteLine(mySchoolInfo.NameOfTheSchool);

        Console.ReadKey();
    }
}
于 2013-02-05T00:59:53.907 に答える
0

メソッドの外でこれらの変数にアクセスできない理由GetSchoolInfoは、それらがローカル変数であるため、そのメソッドの外のどこでもスコープ外になるためです。私はその主題について読み上げました。

于 2013-02-05T00:47:17.990 に答える
0

メソッドはvoid関数として宣言されています。変数SchoolNameEnrollmentStatusColorOne、およびColorTwoはローカル変数であり、返されないため、GetSchoolInfo()関数の外部からそれらにアクセスすることはできません。それらをグローバル変数として宣言するか、 を作成しCollectionて関数から返すことができます。私はオプション 2 を好みますが、それはあなた次第です。

于 2013-02-05T00:48:16.523 に答える
0

GetSchoolnfo() メソッドで定義された変数は、そのメソッドに対してローカルです。つまり、そのメソッドでのみアクセスできます。メソッドの代わりにクラス レベルの変数として定義して、他のメソッドからもアクセスできるようにすることができます。

class Program
{
    private String SchoolName;
    private String EnrollmentStatus;
    private String ColorOne;
    private String ColorTwo;

    public static void GetSchoolInfo()
    {

        Console.WriteLine("Please enter your school name: ");
        SchoolName = Console.ReadLine();
        Console.WriteLine("Please enter your Enrollment Status: ");
        EnrollmentStatus = Console.ReadLine();
        Console.WriteLine("Pleas enter one of your school's colors: ");
        ColorOne = Console.ReadLine();
        Console.WriteLine("Please enter the other school color: ");
        ColorTwo = Console.ReadLine();
    }
    static void Main(string[] args)
    {
        GetSchoolInfo();

        Console.ReadLine();

    }
于 2013-02-05T00:48:24.417 に答える