变化,我有以下XML(节选):使用LINQ把XML转换字典时,XML文件中的条目格式
<Offsets>
<PlayerStructBase>0xF24C10</PlayerStructBase>
<HP>
<offset>0x17e8</offset>
</HP>
<MaxHP>
<offset>0x17ec</offset>
</MaxHP>
<MP>
<offset>0x17f0</offset>
</MP>
<DistanceToTarget>
<offset>0xEB9A98</offset>
<offset>0x17f0</offset>
</DistanceToTarget>
</Offsets>
我想使用LINQ来读它,然后把它变成一个字典。我无法用其他帖子/谷歌的数字来说明当每个条目(HP,MP等)可能具有从一个偏移量到多个偏移量的任何东西时,如何做到这一点,并且它们都具有相同的元素名称:“偏移”)。
任何好点子?
编辑: 我忘了提及输出词典应该是:Dictionary<string, IntPtr>
。我有一个方法可以在循环中将int []转换为IntPtr:pointers [i] = Utils.getPointerFromBaseOffsets(ProcessHandle,_baseAddress,offsetsets [i]);.也许有一些方法可以在创建字典时直接设置这些IntPtr?或者我首先必须用int []填充它,然后在循环中覆盖每个值?如果后者,我会怎么做?
UPDATE:我结束了修改XML所以PlayerStructBase六角被包裹在一个偏移元件,如在XML中的其他项。然后我只是这样做:
//Load Offset list
var offsetXElement = XDocument.Load(path + @"\Offsets.xml").Root;
if (offsetXElement != null)
OffsetDictionary =
offsetXElement.Elements()
.ToDictionary(o => o.Name.LocalName,
o => MemoryHandler.Instance.GetPointerFromBaseOffsets(o.Elements().Select(x => int.Parse(x.Value.Substring(2), NumberStyles.AllowHexSpecifier)).ToArray()));
如果这个结构没有改变,它可能适合更好的类而不是字典。 – Mephy 2014-09-04 18:22:47
@Mephy只有一个字段的类(int []偏移量)?似乎有点矫枉过正? – Magnus 2014-09-05 09:10:14
@Mephy Ment IntPtr作为唯一的字段,而不是int []。 – Magnus 2014-09-05 09:21:28