私はquestion using these same examplesを持っています - この質問は別の問題に焦点を当てています。 Family
のような定義されたメソッドがある場合はネストされたクラスリストからフラットなリストを取得する方法<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
}
: は、以下のクラスを考える
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の1つのフラットなリストにするにはどうすればよいですか?
あなたは 'P => p.People'を試してみましたか? – jvstech
データ構造にループがある場合は、このソリューションを使用できます。http://stackoverflow.com/questions/141467/recursive-list-flattening/24747394#answer-24747394 – Aidin