如何在自定义类List中实现Guid字段的存在性检查(类似字典ContainsKey)?
问题:自定义类List中指定Guid的存在性检查
使用字典时,可直接通过ContainsKey或检查Value判断是否包含指定内容,但存储自定义类的List情况不同。示例中字典_wayspotAnchorGameObjects的Key类型为Guid,与wayspotAnchor.ID类型一致,可通过ContainsKey正常判断是否包含该ID。
但存储自定义类MySecondGameList的List(my_second_game_list)包含多个字段,其中guid为Guid类型。需判断wayspotAnchor.ID是否存在于该List的guid字段中,但直接比较会因类型不匹配报错,无法像字典那样仅针对指定字段检查。
相关代码
自定义类
public class MySecondGameList { public Guid guid; public string readable_guid; public GameObject anchor_gameobject; }
List定义
public class GameData_List : MonoBehaviour { public List<MySecondGameList> my_second_game_list; }
待完善方法
private void CreateAnchorGameObjects(IWayspotAnchor[] wayspotAnchors) { foreach (var wayspotAnchor in wayspotAnchors) { if (gameData_List.my_second_game_list.) { } if (_wayspotAnchorGameObjects.ContainsKey(wayspotAnchor.ID)) { Debug.Log("working"); continue; } } }
解决方案
方法1:使用Linq的Any()方法
首先确保代码文件顶部引入Linq命名空间:
using System.Linq;
然后修改判断条件:
if (gameData_List.my_second_game_list.Any(item => item.guid == wayspotAnchor.ID)) { // 存在该Guid时的逻辑 }
Any()会遍历List,检查是否存在任意一个元素的guid与wayspotAnchor.ID相等,满足条件则返回true。
方法2:预转HashSet提升查询性能
如果需要多次执行该检查,建议提前将List中的guid提取到HashSet<Guid>中,HashSet的Contains方法查询效率远高于List遍历:
// 可在初始化或数据更新时执行一次 HashSet<Guid> anchorGuidSet = new HashSet<Guid>(gameData_List.my_second_game_list.Select(item => item.guid)); // 后续判断时直接使用 if (anchorGuidSet.Contains(wayspotAnchor.ID)) { // 存在该Guid时的逻辑 }
内容的提问来源于stack exchange,提问作者aron kan
相关产品推荐
相关产品推荐

