我正在使用IEnumerable
中的myObjects
。那些myObjects
由App.config
和其他XML文件设置。
我在每个文件的对象模型中加载配置,然后将内容添加到myObjects
中。所以我只想合并对象模型。
myObjects
包含IEnumerable
中的myObjectChild
,而myObjectChild
包含IEnumerable
中的myObjectChildChild
。
我在所有这些IEnumerable
中迷失了一点,也不知道如何合并。
以下是课程:
public class MyObject
{
public string Name { get; set; }
public IEnumerable<MyObjectChild> MyObjectChilds { get; set; }
}
public class MyObjectChild
{
public string Name { get; set; }
public IEnumerable<MyObjectChildChild> MyObjectChildChilds { get; set; }
}
public class MyObjectChildChild
{
public string Name { get; set; }
public string Value { get; set; }
}
///////////////////////////////////////////////// //////////////////////////////
编辑////
class Program
{
static void Main(IEnumerable<MyObject> myObjects)
{
List<MyObject> objectConfigList = new List<MyObject>();
foreach (var myO in myObjects)
{
if (objectConfigList.Any(a => a.Name == myO.Name))
{
Console.WriteLine("myO already in the list: " + myO.Name);
Console.WriteLine("Check current myO.myOC");
List<MyObjectChild> myOChild = myO.MyObjectChilds.ToList();
foreach (var myOC in myOChild)
{
if (objectConfigList.Where(a => a.Name == myO.Name).First().MyObjectChilds.Any(s => s.Name == myOC.Name))
{
Console.WriteLine("myOC already in the myO: " + myOC.Name);
List<MyObjectChildChild> tempmyOCC = myOC.MyObjectChildChilds.ToList();
Console.WriteLine("Check current myOC.myOCC");
foreach (var myOCC in tempmyOCC)
{
if (objectConfigList.Where(a => a.Name == myO.Name).First().MyObjectChilds.Where(myOCt => myOCt.Name == myOC.Name).First().MyObjectChildChilds.Any(p => p.Name == myOCC.Name))
{
Console.WriteLine("myOCC already defined in this myOCction: " + myOCC.Name);
}
else
{
objectConfigList.Where(a => a.Name == myO.Name).First().MyObjectChilds.Where(myOCc => myOCc.Name == myOC.Name).First().MyObjectChildChilds.ToList().Add(myOCC);
}
}
}
else
{
objectConfigList.Where(a => a.Name == myO.Name).First().MyObjectChilds.ToList().Add(myOC);
}
}
}
else
{
objectConfigList.Add(myO);
}
}
}
}
我找到了解决方案,因为我没有成功完成提议。
我在这里发布我的解决方案,如果您有任何改进的建议,我将很高兴阅读!
感谢您的帮助。
答案 0 :(得分:0)
要合并来自不同可枚举的许多相同类型的可枚举,请使用.SelectMany()
答案 1 :(得分:0)
要合并两个列表,可以使用IEnumerable.Concat方法,但这不能确保检查重复
您可以使用IEnumerable.Distinct()删除重复项,但是MyObject必须实现IEquatable接口
public class MyObject : IEquatable<MyObject>
{
public string Name { get; set; }
public IEnumerable<MyObjectChild> MyObjectChilds { get; set; }
public bool Equals<MyObject>(MyObject other) { return this.Name.Equals(other.Name); }
}