2015-06-22 2 views
0

Можно ли собрать строки после петли foreach? Например:Соберите строки после петли foreach

StringCollection col = new StringCollection(); 
XmlNodeList skillNameNodeList=SkillXML.GetElementsByTagName("name"); 
foreach (XmlNode skillNameNode in skillNameNodeList) 
{ 
    skillsName=skillNameNode.Attributes["value"].Value; 
} 

col.Add(skillsName); //Return System.Collections.Specialized.StringCollection 

Я хочу собрать каждую skillsName и поместить их в коллекции или списка, так что я могу использовать его позже. Правильно ли использовать StringCollection? Или любое другое лучшее предложение?

+3

Просто вызовите 'col.Add (skillsName)' в цикле? –

ответ

3

Да, вам нужно сделать добавление в цикле. Я хотел бы использовать List<string> как она поддерживает LINQ:

XmlNodeList skillNameNodeList=SkillXML.GetElementsByTagName("name"); 
List<string> skills = new List<string>(); 

foreach (XmlNode skillNameNode in skillNameNodeList) 
{ 
    skills.Add(skillNameNode.Attributes["value"].Value); 
} 
2

Вы также можете создать список непосредственно с помощью LINQ

var list = 
SkillXML.GetElementsByTagName("name") 
.Cast<XmlNode>() 
.Select(n => n.Attributes["value"].Value) 
.ToList(); 
0
List<string> myList = new List<string>(); 
XmlNodeList skillNameNodeList=SkillXML.GetElementsByTagName("name"); 
foreach (XmlNode skillNameNode in skillNameNodeList) 
{ 
    myList.Add(skillNameNode.Attributes["value"].Value); 
} 

Там может быть аккуратнее способ сделать это с помощью LINQ. Это будет что-то вроде ниже (отказ от ответственности: не проверен).

var myList = SkillXML.GetElementsByTagName("name").Cast<XmlNode>().Select(n => n.Attributes["value"].Value).ToList(); 
Смежные вопросы