【发布时间】:2014-09-09 22:32:35
【问题描述】:
在这里使用两个 LINQ 语句有点吃力。基本上我想将以下两个 XML 文件转换为字典(后面的类型详细信息)。以下是 XML 的快照:
偏移 XML:
<Offsets>
<PlayerStructBase>0xF24C10</PlayerStructBase>
<HP>
<offset>0x17e8</offset>
</HP>
<MaxHP>
<offset>0x17ec</offset>
</MaxHP>
</Offsets>
所需输出:Dictionary<string, IntPtr>。我有一个名为 GetPointerFromBaseOffsets(int[] offsets) 的方法,它从带有偏移量的 int 数组返回 IntPtr(例如:0x1234, 0x17e2)。
技能 XML:
<Skills>
<Potion>
<Cast>0.00</Cast>
<ReCast>60.00</ReCast>
<MPCost>0</MPCost>
</Potion>
<Ruin>
<Cast>2.49</Cast>
<ReCast>2.49</ReCast>
<MPCost>9</MPCost>
</Ruin>
</Skills>
所需输出:Dictionary<string, Skill>。 Skill 是一个具有 Cast、ReCast 和 MpCost 等属性的类。
这些是我的尝试:
将 XML 偏移到字典
OffsetDictionary =
XDocument.Load(folderPath+@"\offsets.xml")
.XPathSelectElements("/Offsets/*[offset]")
.ToDictionary(o => o.Name.LocalName,
o => MemoryManager.GetPointerFromBaseOffsets(Enumerable.Cast<int>(o.Elements()).ToArray()));
技能 XML 到字典
SkillDictionary =
XDocument.Load(folderPath + @"\skills.xml")
.XPathSelectElements("/Skills/*")
.ToDictionary(e => e.Name.LocalName, e => new Skill(e.Name.LocalName, (double)e.Element("Cast"), (double)e.Element("ReCast"), (int)e.Element("MPCost")));
问题:在尝试创建 Offset 字典时,我收到第一条错误消息(运行时),它不能进行 Cast。谁能告诉我如何写这两个块?
谢谢!
【问题讨论】:
标签: c# xml linq dictionary