public A { public string Name{get;set;} public List<B> AB{get;set;} } public B { public string Name{get;set;} }
现在有个list<A>,当A.Name相同时是一个集合下的,这个怎么判断下,听说可以做个什么键值对的东西,怎么写啊?
“现在有个list<A>,当A.Name相同时是一个集合下的,这个怎么判断下”
表述不清啊 你是想说,如果A.Name相同,则算是同一个对象?
然后你要判断什么?
是的如果A.Name相同就放到同一个集合下边
private static void GO() { B b1 = new B("A"); B b2 = new B("B"); B b3 = new B("C"); B b4 = new B("D"); A A1 = new A("1"); A A2 = new A("2"); A A3 = new A("1"); A1.AB = new List<B>() {b1,b2 }; A2.AB = new List<B>() { b2, b3 }; A3.AB = new List<B>() { b3, b4 }; List<A> listA = new List<A>(){A1,A2,A3}; test(listA); } private static void test(List<A> listA) { ILookup<string, A> l = listA.ToLookup(a => a.Name); listA.Clear(); foreach (var item in l) { var list = l[item.Key].ToList(); var listB = new List<B>(); list.ForEach(a => listB = listB.Concat(a.AB).ToList()); listA.Add(new A(item.Key) { AB = listB }); } } } public class A { public A(string name) { Name = name; } public string Name{get;set;} public List<B> AB{get;set;} } public class B { public B(string name) { Name = name; } public string Name{get;set;} }
@雨淋淋:
给你看段例子
public class FontCollection : System.Collections.ObjectModel.KeyedCollection<string, _Font> { protected override string GetKeyForItem(_Font item) { return item.Name; } }
@SharpSoft: 能帮我解答下吗?谢谢你!(例子没看懂)
@雨淋淋: 实现
KeyedCollection这个集合,可以把类型中的某个属性当作这个集合的键,只要实现
GetKeyForItem方法就行了