我得到了以下代码
List<RRProcess> noDuplicates = pSorted
.GroupBy(i => i.pID)
.Select(group => group.First())
.ToList();
Run Code Online (Sandbox Code Playgroud)
问题是,如果我在noDuplicates中更改了任何内容,它也会在pSorted中更改它.我已经阅读了有关如何创建新列表的所有帖子,但仍然无法在我的情况下弄明白,我该怎么做呢.
所以问题是,如何从pSorted的元素创建一个新列表,而不重复具有相同pID的对象?
谢谢
如果要防止这种情况,则需要创建新对象.有多种方法,例如使用ICloneable,或自己创建新对象.
如果你的类实现ICloneable:
List<RRProcess> noDuplicates = pSorted
.GroupBy(i => i.pID)
.Select(group => (RRProcess) group.First().Clone())
.ToList();
Run Code Online (Sandbox Code Playgroud)
或者,如果它有一个允许从原始副本制作副本的构造函数:
List<RRProcess> noDuplicates = pSorted
.GroupBy(i => i.pID)
.Select(group => new RRProcess(group.First()))
.ToList();
Run Code Online (Sandbox Code Playgroud)
或者使用无参数构造函数+对象初始值设定项:
List<RRProcess> noDuplicates = pSorted
.GroupBy(i => i.pID)
.Select(group => group.First())
.Select(x => new RRProcess { pID = x.pID /* etc for other properties */ } )
.ToList();
Run Code Online (Sandbox Code Playgroud)
请注意,创建副本 - 无论如何 - 可能会很棘手,例如,如果原始文件具有集合,您可能会发现复制的对象需要获取该集合的副本,而不仅仅是对同一旧集合的新引用.这称为深度克隆.两者都可以工作,这取决于你是否需要这个.