我有一個question using these same examples - 這個問題是關於一個不同的問題。 鑑於以下類:如何從嵌套類獲取平展列表列表<T>?
[XmlRoot]
public class Family {
[XmlElement]
public List<Person> Person;
}
public class Person {
[XmlAttribute("member")]
public MemberType Member { get; set; }
[XmlAttribute("id")]
public int Id { get; set; }
[XmlElement]
public string Surname { get; set; }
[XmlElement]
public string Forename { get; set; }
[XmlElement("Person")]
public List<Person> People;
}
public enum MemberType {
Father,
Mother,
Son,
Daughter
}
如果Family
具有被定義爲這樣的方法:
public IEnumerable<Person> Find (Func<Person, bool> predicate) {
// how do I get SelectMany to flatten the list?
foreach (var p in family.Person.SelectMany(p => p)) {
if(predicate(p)) {
yield return p;
}
}
}
我需要能夠超過Person
扁平列表來執行謂詞。在上面的例子中,SelectMany
沒有像我希望的那樣將列表弄平。上面實際上不會編譯,因爲推斷的類型不能確定。
我怎樣才能讓Family.Person集合成爲一個扁平的Person列表?
你嘗試'P => p.People'? – jvstech 2012-01-12 16:28:53
如果你的數據結構中有循環,你可以使用下面的解決方案:http://stackoverflow.com/questions/141467/recursive-list-flattening/24747394#answer-24747394 – Aidin 2014-07-14 23:03:55