C#:我应该使用什么:Array或ArrayList或List of list?

时间:2013-05-02 21:34:27

标签: c# xml arrays list

我正在学习C#,我需要一些建议。

我正在尝试从XML文件创建用户(Active Directory)。这些用户是学生和教师。对于每个用户,我需要名称姓氏生日日期以生成登录密码

  • 学生只能成为一名学生(他的班级)的成员。
  • 教师可以有一个或多个小组(他教授的课程)。

我需要的所有信息都在XML中。

在powershell中,它的工作原理如下:

  • 学生:tab[name,surname,birthdate,login,group](也适用于 C#)
  • 教师:tab[name,surname,birthdate,login,tab[groups]]

我如何在C#中执行此操作?我尝试使用3D中的数组但是它丑陋且不太高效,有数百名用户...... 使用列表有更好的方法吗? ArrayList?

抱歉英语不好......

感谢您的帮助(以及代码^^)!

教师的XML示例:

<DATA>
-<PERSONS>
--<PERSON ID="6022">
---<NAME>DOE</NAME>
---<SURNAME>John</SURNAME>
---<BIRHDATE>1952-06-29</DATE_NAISSANCE>
--</PERSON>
--...
-</PERSONS>
-<CLASSES>
--<CLASS CODE="3A">
---<TEACHERS>
----<TEACHER ID="6022">
-----<SUBJECT>Maths</SUBJECT>
----</TEACHER>
---</TEACHERS>
--</CLASS>
--<CLASS CODE="5D">
---<TEACHERS>
----<TEACHER ID="6022">
-----<SUBJECT>Maths</SUBJECT>
----</TEACHER>
---</TEACHERS>
--</CLASS>
...
-</CLASSES>
</DATA>

3 个答案:

答案 0 :(得分:4)

您可能需要查看XDocument

您可以致电XDocument.Parse("<myDoc></myDoc>")

创建一个

示例:

var xml = @"<DATA>
<PERSONS>
<PERSON ID=""6022"">
<NAME>DOE</NAME>
<SURNAME>John</SURNAME>
<BIRHDATE>19520629</BIRHDATE>
</PERSON>
</PERSONS>
<CLASSES>
<CLASS CODE=""3A"">
<TEACHERS>
<TEACHER ID=""6022"">
<SUBJECT>Maths</SUBJECT>
</TEACHER>
</TEACHERS>
</CLASS>
<CLASS CODE=""5D"">
<TEACHERS>
<TEACHER ID=""6022"">
<SUBJECT>Maths</SUBJECT>
</TEACHER>
</TEACHERS>
</CLASS>
</CLASSES>
</DATA>";

var doc = XDocument.Parse(xml);

var peopleElements = doc
    .Elements("DATA")
    .Elements("PERSONS")
    .Elements("PERSON");
var q = from person in peopleElements
select new {
    Name = person.Element("NAME").Value,
    BirthDate = person.Element("BIRHDATE").Value
};

var peopleList = q.ToList();

答案 1 :(得分:0)

我不完全确定你在寻找什么:你现在正在做什么,想要改变一个阵列?你是在谈论每个人只是阵列中的一串字符串吗?根据你的陈述,你应该真正创建一个Person类,其中包含学生和教师共享的属性,然后是另外两个类,Student和Teacher,都继承自该类。那时,在Student上使用Class字符串属性而不是单个Group属性是有意义的,并且ClassesTaught List&lt;字符串&gt;老师的财产。 3d数组非常适合最好用3d数组表示的内容(例如,在3d空间中指向),但对于有组织的数据列表,最好将数据实际组织到类中属性。

此时,您将所有数据解析为单个Person对象,并将它们添加到List&lt;人&gt;。 (或者,如果你喜欢,取决于你正在做什么,可能是一个Dictionary&lt; int,Person&gt;,如果那个ID属性实际上是一个唯一的标识符,你希望通过该id键轻松访问你的Person对象。)

答案 2 :(得分:0)

ArrayList的用例确实不多。如果你能帮助的话,避免它和它不断铸造和重铸的伴侣。