You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为C# List列表中的重复对象分配唯一的uniquid属性值

问题根因

你遇到的重复ID问题本质是C#引用类型的特性导致的:你定义的icons是类(引用类型),如果fullList里存在多个指向同一个内存实例的引用(也就是你说的属性完全相同的重复对象),循环中每次给single.uniquid赋值时,修改的是同一个实例的属性,之前已经存入icons列表的同实例引用的属性值也会被同步覆盖,最终所有指向同一个实例的引用的uniquid都会变成最后一次赋值的Guid,因此出现重复。

解决方案

核心思路是每次循环都创建全新的icons实例,避免修改原实例导致的互相影响:

List<icons> icons = new List<icons>();
foreach (var single in fullList)
{   
    // 新建icons实例,拷贝原对象所有属性
    var newIcon = new icons()
    {
        // 此处补齐icons类除uniquid外的所有原有属性赋值,示例如下
        OriginalId = single.OriginalId,
        IconUrl = single.IconUrl,
        Size = single.Size,
        // 给新实例单独生成唯一ID
        uniquid = Guid.NewGuid()
    };
    icons.Add(newIcon);
}

如果icons类属性较多,手动拷贝太繁琐,也可以通过序列化反序列化、AutoMapper映射等方式实现快速深拷贝。

特殊场景说明

如果你必须保留原fullList里的实例不做拷贝,需要先把所有重复实例拆分后再赋值ID,但这种场景下原实例本身就存在多处引用,修改属性仍然会有全局影响,不推荐使用。


内容的提问来源于stack exchange,提问作者developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 03:24:02