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

开发Albion Parser时遇‘已添加相同键项’错误,如何修复?

修复“已添加具有相同键的项。键: 1”错误

错误原因

你的代码在OnEvent方法中,当Code == 3时直接调用Parameters.Add(1, EventCodes.Move),但Dictionary不允许存在重复键。如果传入的Parameters字典中已经包含键为1的条目,执行Add操作就会触发这个异常。

修复方案

有两种可靠的解决方式,根据你的.NET版本选择:

方案1:使用TryAdd方法(.NET Core 3.0+ / .NET 5+)

TryAdd方法会先检查键是否存在,仅当键不存在时才添加条目,不会抛出异常:

if (Code == 3)
{
    Parameters.TryAdd(1, EventCodes.Move);
}

方案2:先检查再添加/更新(兼容所有.NET版本)

手动判断键是否存在,存在则更新值,不存在则添加:

if (Code == 3)
{
    if (Parameters.ContainsKey(1))
    {
        Parameters[1] = EventCodes.Move;
    }
    else
    {
        Parameters.Add(1, EventCodes.Move);
    }
}

额外建议

如果不希望修改原始的Parameters字典(避免影响其他逻辑),可以创建一个副本再操作:

protected override void OnEvent(byte Code, Dictionary<byte, object> Parameters)
{
    Dictionary<byte, object> targetParams = Parameters;
    if (Code == 3)
    {
        targetParams = new Dictionary<byte, object>(Parameters);
        targetParams[1] = EventCodes.Move; // 直接赋值,存在则覆盖,不存在则添加
    }

    short eventCode = ParseEventCode(targetParams);
    if (eventCode == 27)
    {
        Console.Write("EventCode: " + eventCode + " [");
        targetParams.ToList().ForEach(x => Console.Write(x.Key + " {" + x.Value + "::" + ObjectDumper.Dump(x.Value, 2) + "},"));
        Console.WriteLine("]");
    }

    var eventPacket = new EventPacket(eventCode, targetParams);
    handlers.HandleAsync(eventPacket);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:15:38