【发布时间】:2022-01-18 00:51:55
【问题描述】:
我有一个问题,我基本上知道答案。我想知道为什么新创建的List<int> 是空的,为什么即使我用值填充它也是空的?我可以轻松地在类 Vysvedceni(ReportCard) 列表中创建它,然后在 Main 类中创建一个单独的字段,然后将其添加到 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();
}
}
}
【问题讨论】:
-
it prints just only Subject and [System.Generics...]实际上 say 计数为 0,还是您只是在期望内容的位置获得类名?System.Object.ToString()的默认实现打印类名.... -
试试
Znamky.Select(i => $"{i.Key}:[{string.Join(",", i.Value)}]") -
不要使用
Enum作为您的密钥。使用您定义的实际枚举类型Predmety。这样你就失去了类型安全。尽管枚举本身是值类型,但Enum(基类)是引用类型,因此当您在字典使用键的任何地方使用枚举值时,它们会被装箱。 -
@BenVoigt 它为键打印 1,为值(计数)打印 1
标签: c# arrays list linq empty-list