c# - 如何使用 LINQ 使用字典填充类

标签 c# linq unity3d

在我的项目中,我使用 XML 导入类的各种实例。 我需要导入一个列表。 问题是如何在字典中导入所有“dynamicDrop”:

XML:

<LootProfile name="volpeNormale">
    <dynamicDropNumber>3</dynamicDropNumber>
    <dynamicDrop>70</dynamicDrop>
    <dynamicDrop>40</dynamicDrop>
    <dynamicDrop>10</dynamicDrop>
    <dynamicTypeArmor>33</dynamicTypeArmor>
    <dynamicTypeWeapon>33</dynamicTypeWeapon>
    <dynamicTypeConsumable>34</dynamicTypeConsumable>
    <dynamicRarityCommon>70</dynamicRarityCommon>
    <dynamicRarityUncommon>20</dynamicRarityUncommon>
    <dynamicRarityRare>8</dynamicRarityRare>
    <dynamicRarityEpic>2</dynamicRarityEpic>
    <staticDropNumber>2</staticDropNumber>
    <staticDrop idPattern="100">60</staticDrop>
    <staticDrop idPattern="145">100</staticDrop>
    <faction>All</faction>
    <location>All</location>
</LootProfile>

XMLImporter 查询:

var query = from item in xml.Root.Elements("LootProfile")
            select new LootProfile()
            {
                name = (string)item.Attribute("name"),
                dynamicDropNumber = (int)item.Element("dynamicDropNumber"),
                dynamicDrop = (Dictionary<int,string>)item.Element("dynamicDrop) //this one doesnt work!
                //other element....
            }
return query.ToList<LootProfile>();

最佳答案

这里是你如何做到的:

var query = xml.Elements("LootProfile")
    .Select(item => new LootProfile()
    {
        name = (string) item.Attribute("name"),
        dynamicDropNumber = (int) item.Element("dynamicDropNumber"),
        dynamicDrop =
            item.Elements("dynamicDrop")
                .Select((Item, Index) => new {Item, Index})
                .ToDictionary(x => x.Index, x => float.Parse(x.Item.Value))
        //other element....
    });

var result = query.ToList();

诀窍是使用 overload of Select这给了你两个 lambda 参数;项目本身,以及项目的索引。

关于c# - 如何使用 LINQ 使用字典填充类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34963865/

相关文章:

c# - .NET Framework 中的 .PE 文件是什么?

c# - 通过 .NET Azure SDK 扩展云服务实例计数?

c# - 无法使用 Microsoft Owiin selfhost 获取 WebSocket 请求

unity3d - 统一: SpeechLib works fine in editor but not in runtime

c# - 使用 RX (Reactive Extensions) 创建 20 个延迟 30 毫秒的事件

c# - 我在C#中输入文本框(wpf)时出现奇怪的打字机声音

c# - Linq to Entities 组查询给出每组中的结果列表

linq - 从多个版本项目中选择最新项目的 LINQ 是什么?

c# - 使用 Linq 进行复制/过滤会在 foreach 循环中产生动态结果吗?

unity3d - unity NavMesh 障碍物