访问数组内部的结构值

时间:2016-02-11 01:32:18

标签: c# arrays struct

首先,这是我的代码:

    struct eleve
    {
        public string nom;
        public string prenom;
        public char sexe;
        public int programme;
        public naissance datenaissance;
    }

    static void Main(string[] args)
    {
        eleve[] classe = new eleve[8];
        var sexe1 = "MF";
        var random = new Random();

        for (int i = 0; i < classe.GetLength(0); i++)
        {
            Console.WriteLine("Veuillez ecrire le prenom de l'etudiant.");
            classe[i].prenom = Console.ReadLine();
            Console.WriteLine("Veuillez ecrire le nom de l'etudiant.");
            classe[i].nom = Console.ReadLine();
            Console.WriteLine("Veuillez ecrire la date de naissance de l'etudiant. (Annee, mois, jour)");
            classe[i].datenaissance.annee = Convert.ToInt32(Console.ReadLine());
            classe[i].datenaissance.mois = Convert.ToInt32(Console.ReadLine());
            classe[i].datenaissance.jour = Convert.ToInt32(Console.ReadLine());
            classe[i].sexe = sexe1[random.Next(sexe1.Length)];
            classe[i].programme = random.Next(1, 400);
        }

        Array.Sort(classe, (x, y) => String.Compare(x.nom, y.nom)); //trie de nom
        for (int i = 0; i< classe.GetLength(0); i++)
        {
            affichestruct(classe[i]);
        }

我试图创建一个单独打印出女性和男性学生的程序,例如,它最终将显示这样的内容:

Male : 
malestudent1
malestuden2

Female : 
femalestudent1
femalestudent2

我尝试过这样做,但它没有工作

    static void affichemale(int[] arr)
    {
        Console.WriteLine("Male : ");
        for (int i = 0; i < arr.GetLength(0); i++)
        {
            if (arr[i].sexe == "M")
            {
             Console.WriteLine(arr[i].nom);
            }
        }
       Console.WriteLine("Female: ");
       for (int i = 0; i < arr.GetLength(0); i++)
        {
            if (arr[i].sexe == "F")
            {
             Console.WriteLine(arr[i].nom);
            }
        }
    }

我可以做些什么或改变什么才能让它发挥作用?

1 个答案:

答案 0 :(得分:1)

好的,我看到了各种各样的问题。我将根据他们在代码中的顺序列出它们。

1)尽量不要使用结构。如果您没有使用结构的特定原因,请使用类。有关类和结构的更多信息,请访问:https://msdn.microsoft.com/en-us/library/ms173109.aspx

2)您尝试拨打affichestruct。此方法不存在,我想您的意思是以affichemale命名。

2)affichemale获取int[]作为参数。但是,您使用它就好像您实际期望eleve[]一样。将参数类型更改为eleve[]。这就是编译器出错的原因。

3)在affichemale中,您尝试将“F”和“M”与eleve.nom进行比较。问题是“M”和“F”是字符串而eleve.nom是字符。我不确定这是否有效,但我猜它会因为无法比拟的类型而崩溃。使用'M'和'F'代替比较。