簡體   English   中英

為什么是列表<int>空的,即使我給它添加了值? c#</int>

[英]why is List<int> empty,even if I added values to it? c#

我有一個問題,我基本上知道答案。我想知道為什么新創建的List<int>是空的,為什么即使我用值填充它也是空的? 我可以輕松地在 class Vysvedceni(ReportCard)列表中創建它,然后在 Main class 中創建一個單獨的字段,然后將其添加到Dictionary<Enum,List<int>> ...

像這樣的東西:

List<Enum,List<int>> array = new ...
array.Add(1);
array.Add(2);
array.Add(5);
dic[Subject].Add(array);

但我想以不同的方式做到這一點:

Student student = new Student("Jan", "Novak",new Vysvedceni());
student.Vysvedceni.Znamky.Add(Vysvedceni.Subjects.math, new List<int>() {1,1,2,3,4,3});

我的目標很簡單,用學生和他/她的分數打印字典。
我的母語不是英語,我想翻譯代碼,但如果你復制代碼,我怕會弄得一團糟。 至少我添加了一個小翻譯。 我還添加了我的評論問題所在或方法做什么。

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

namespace Cviceni1412
{
    class Student
    {
        private string jmeno; //Name
        private string prijmeni; //Surname
        private Vysvedceni vysvedceni;
        //Dictionary<List<Student>, List<Vysvedceni>> vysvedceniTridy = new Dictionary<List<Student>, List<Vysvedceni>>();
    
        List<Student> studenti = new List<Student>();

        public void SetridStudenty()
        {
            var setrid = (from student in studenti select student)
                .GroupBy(student => student.Jmeno.First()).ToList();
            foreach (var item in setrid)
            {
                Console.WriteLine(item);
            }
        }
    
        public override string ToString()
        {
            return "jmeno:"+jmeno + ",prijmeni:" + prijmeni;
        }
    
        public Student(string jmeno, string prijmeni, Vysvedceni vysvedceni)
        {
            this.jmeno = jmeno;
            this.prijmeni = prijmeni;
            this.vysvedceni = vysvedceni;
        }
    
        public string Jmeno { get => jmeno; set => jmeno = value; }
        public string Prijmeni { get => prijmeni; set => prijmeni = value; }
        internal Vysvedceni Vysvedceni { get => vysvedceni; set => vysvedceni = value; }
    }
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;

namespace Cviceni1412
{
    class Vysvedceni
    {
        private Dictionary<Enum, List<int>> znamky = new Dictionary<Enum, List<int>>();
        private Dictionary<Enum, int> vizo = new Dictionary<Enum, int>();
        private Predmety skolniPredmety;

        public Dictionary<Enum, List<int>> Znamky { get => znamky; set => znamky = value; }
        internal Predmety SkolniPredmety { get => skolniPredmety; set => skolniPredmety = value; }
        public Dictionary<Enum, int> Vizo{ get => vizo; set => vizo= value; }

        public double Prumer(Enum predmet) //Method for calulating Average and final mark for student
        {
            double prumerZnamka=Znamky[predmet].Average();
           
            return prumerZnamka ;
        }

        public void Vypis()//Print List method
        {
            Znamky.Select(i => $"{i.Key}:{i.Value}").ToList().ForEach(Console.WriteLine);
        }

        public Vysvedceni()
        {
        }

        public enum Predmety//Subjects like math,Engl,P.E.,Physic
        {
            matematika,cestina,fyzika,programovani,telocvik,databaze,webovky
        }
    }
}
//Student class

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

namespace Cviceni1412
{
    class Student
    {
        private string jmeno;
        private string prijmeni;
        private Vysvedceni vysvedceni;
        //Dictionary<List<Student>, List<Vysvedceni>> vysvedceniTridy = new Dictionary<List<Student>, List<Vysvedceni>>();

        List<Student> studenti = new List<Student>();

        public void SetridStudenty()//Sort students to the group by their first letter
        {
            var setrid = (from student in studenti select student)
                .GroupBy(student => student.Jmeno.First()).ToList();
            foreach (var item in setrid)
            {
                Console.WriteLine(item);
            }
        }

        public override string ToString()
        {
            return "jmeno:"+jmeno + ",prijmeni:" + prijmeni;
        }

        public Student(string jmeno, string prijmeni, Vysvedceni vysvedceni)
        {
            this.jmeno = jmeno;
            this.prijmeni = prijmeni;
            this.vysvedceni = vysvedceni;
        }

        public string Jmeno { get => jmeno; set => jmeno = value; }
        public string Prijmeni { get => prijmeni; set => prijmeni = value; }
        internal Vysvedceni Vysvedceni { get => vysvedceni; set => vysvedceni = value; }
    }
}
//Main class
using System;
using System.Collections.Generic;
using System.Linq;

namespace Cviceni1412
{
    class Program
    {
        static void Main(string[] args)
        {
            Student student = new Student("Jan","Novák",new Vysvedceni());
            student.Vysvedceni.Znamky.Add(Vysvedceni.Predmety.matematika, new List<int>() {1,1,2,3,4,3 });//There is problem,List is declared and filled,but it prints just only Subject and [System.Generics...]

            Console.WriteLine(student.Vysvedceni.Znamky.Keys.Count);
            student.Vysvedceni.Vypis();  
        }
    }
}

我是如何解決的。 問題不在於 ToString() 方法,而在於 Print() 方法。Linq 僅迭代了 Keys。希望我有所幫助

public void Print(Subjects sub)
{
    foreach (var item in marks//dictionary)
    {
        Console.WriteLine(item.Key);
  
        foreach (var ite in marks[sub])
        {
             Console.WriteLine(ite);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM