.NET游戏道具掉落日志存储:未知数量节点的内存存储方案
解决方案:优化类结构适配动态掉落来源存储
核心思路
把原类中固定数量的Dropped_From_NPC_#和Dropped_In_Zone_#字段,替换为集合类型,以此灵活存储任意数量的NPC与区域关联信息,同时保证内存存储和检索的高效性。
优化后的类结构
先创建一个嵌套类封装单组掉落来源的NPC和区域信息,再在主道具类中用List<T>存储多组掉落数据:
// 封装单组掉落来源的NPC与区域信息 public class DropSource { public string NpcName { get; set; } public string ZoneName { get; set; } } // 优化后的道具信息类 public class ItemDatabaseInformation { public string Name { get; set; } public long LinkID { get; set; } public long IconID { get; set; } // 动态存储所有掉落来源,数量可自由增减 public List<DropSource> DropSources { get; set; } = new List<DropSource>(); }
使用说明
- 导入数据时:每读取到一组道具的NPC/区域组合,就实例化一个
DropSource对象,添加到DropSources列表即可,无论数量多少都能处理。 - 检索数据时:直接遍历
DropSources就能获取道具所有掉落来源,也可通过LINQ快速筛选(比如查找指定区域掉落的道具):
// 示例:查找所有在"幽暗森林"掉落的道具 var itemsFromZone = itemList.Where(item => item.DropSources.Any(source => source.ZoneName == "幽暗森林"));
方案优势
- 适配动态数量:不管是1个还是数百个掉落来源,都无需修改类结构,直接存储。
- 内存效率高:
List<T>是.NET中轻量高效的内存集合,遍历和检索性能优异。 - 代码可读性强:嵌套类结构清晰,直接体现"道具-多掉落来源"的关联关系,后续维护成本低。
内容的提问来源于stack exchange,提问作者bjcasey
相关产品推荐
相关产品推荐

