'自有类''List'的'SortedList'的索引器

时间:2017-01-24 21:07:25

标签: c# dictionary multidimensional-array sortedlist

我试图创建一个索引器来访问'自己类'的'List'的'SortedList',如下所示:

var vect = new vectAttivita();
//insert like this
vect["John"] = {"math","3cat",30,""};
//read like this
string _class = activity["John"][0].materia;
//and read like this too
string _class = activity[0][0].materia;

我的代码自上次发布后更新:

public class vectAttivita
{
    public SortedList<string, listAttivita> _Inner = new SortedList<string, listAttivita>();

    public void Add(string key)
    {
        _Inner.Add(key, null);
    }

    public SortedList<string, listAttivita> this[int i]
    {
        get
        {
            return _Inner.Values[i]; // <-- Error 1
        }
        set
        {
            _Inner.Values[i] = value; // <-- Error 2
        }
    }

}

public class listAttivita
{
    //public string nome;
    public List<Attivita> listAtt = new List<Attivita>();
    public listAttivita()
    {
        //this.nome = nomeAttivit;
    }
    public void Add(string materia, string ufc, ushort ore, string aulaLabo)
    {
        listAtt.Add(new Attivita(materia, ufc, ore, aulaLabo));
    }
    public void Add(Attivita att)
    {
        listAtt.Add(att);
    }

}

public class Attivita
{
    public string materia;
    public string ufc;
    public ushort ore;
    public string aulaLab;
    public Attivita(string materia, string ufc, ushort ore, string aulaLabo)
    {
        this.materia = materia;
        this.ufc = ufc;
        this.ore = ore;
        this.aulaLab = aulaLabo;
    }

}

英文是:“cs0029不能隐式转换类型......”

错误1:Errore CS0029非èbebibileconvertire in modo implicito il tipo'Estrazione_Excel01.listAttivita'in'System.Collections.Generic.SortedList'

错误2:Errore CS0029非èbebibileconvertire in modo implicito il tipo'System.Collections.Generic.SortedList'in'Estrazione_Excel01.listAttivita'

我是如何从中得到的?

2 个答案:

答案 0 :(得分:1)

结帐Indexers以及如何实施它们。

答案 1 :(得分:0)

我只是摆脱了SortedList类,只保留了List类中添加了一个加入Attivita的方法。然后为了简单起见,在将其添加到字典中之前创建Attivita,其中键将是一个人的名字。

Dictionary<string,listAttivita> students = new Dictionary<string,listAttivita>(){};
Attivita newActivity = new Attivita("math","3cat",30,"");
string studentName ="John";

接下来将其添加到词典中的学生,但首先需要检查学生是否存在,否则add方法会产生错误。这部分很可能位于按钮的on_click方法中,之前的信息将从用户填写的Windows文本框中填充。

if(students.ContainsKey(studentName) )
    students[studentName].Add(newActivity);
else
{
    students[studentName] = new listAttivita(){};
    students[studentName].Add(newActivity);
 }

所以现在如果你想按照排序顺序返回特定学生的所有活动。

var studentActivity = students.Where(x => x.Key==studentName).First().Value.listAtt.OrderBy(x => x.materia);
foreach(var parts in studentActivity)
    Console.WriteLine("Materia:{0} UFC:{1} ORE:{2} aulaLab:{3}", parts.materia, parts.ufc, parts.ore, parts.aulaLab);