我试图创建一个索引器来访问'自己类'的'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'
我是如何从中得到的?
答案 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);