IDictionary <string,list <openxmlcompositeelement =“”>&gt; - 获取List <openxmlcompositeelement>?

时间:2016-03-15 14:44:49

标签: c# openxml

我正在使用Open XML&amp;我有一个IDictionary<String, List<OpenXmlCompositeElement>>结构。我想使用结构的List部分,但this.map.Values尝试将其包装在ICollection中。如何从我的结构中获取List部分?

    public List<OpenXmlCompositeElement> MapData()
    {
        //this does not work
        return this.map.Values;
    }

4 个答案:

答案 0 :(得分:2)

因为它是一本字典,所以它希望你知道你想要哪个键值。

所以这将是您需要的代码,其中yourKey是您要检索的密钥:

public List<OpenXmlCompositeElement> MapData()
{
    return this.map["yourKey"];
}

如果您对密钥没兴趣,并且字典只是一个字典,因为序列化程序这样说,您可以获得第一个项目,例如:

public List<OpenXmlCompositeElement> MapData()
{
    return this.map.Values.First();
}

答案 1 :(得分:0)

您可以遍历字典并使用您想要的值,也可以直接使用密钥访问List(在这种情况下,它是一个字符串)

<video controls poster="img/video-stills/video.png">
    <source src="videos/video.mp4" type="video/mp4" />
</video>

字典中IDictionary<String, List<OpenXmlCompositeElement>> myDictionary; List<OpenXmlCompositeElement> myList = myDictionary["myKey"]; 可用。

或者你可以循环播放

myKey

答案 2 :(得分:0)

假设这是你的字典...

IDictionary<string, List<OpenXmlCompositeElement>> items = ...;

按键获取特定列表......

List<OpenXmlCompositeElement> list = items["key"];

获取字典中的第一个列表...

List<OpenXmlCompositeElement> list = items.Values.First();

将字典中的所有列表连接到一个列表中......

List<OpenXmlCompositeElement> list = items.SelectMany(o => o).ToList();

答案 3 :(得分:0)

   foreach(KeyValuePair<string, List<OpenXmlCompositeElement>> kvp in IDictionary)
    {
    string key = kvp.key
    List<OpenXmlCompositeElement> list = kvp.Value;
        foreach(OpenXmlCompositeElement o in list)
        {
         Do anything you need to your List here
        }
    }

我也在使用字典,所以这是我目前正在使用的一个真实示例:

    foreach(KeyValuePair<string, List<DataRecords>> kvp in vSummaryResults)
        {
            string sKey = kvp.Key;
            List<DataRecords> list = kvp.Value;
            string[] vArr = sKey.Split(',');

            int iTotalTradedQuant = 0;
            double dAvgPrice = 0;
            double dSumQuantPrice = 0;
            double dQuantPrice = 0;
            double dNumClose = 0;

            foreach (DataRecords rec in list)
            {
                if(vSummaryResults.ContainsKey(sKey))
                {
                    iTotalTradedQuant += rec.iQuantity;
                    dQuantPrice = rec.iQuantity * rec.dInputTradePrice;
                    dSumQuantPrice += dQuantPrice;
                    dAvgPrice = dSumQuantPrice / iTotalTradedQuant;
                    dNumClose = rec.dNumericClosingPrice;

                }

                else
                {
                    vSummaryResults.Add(sKey, list);
                    //dNumClose = rec.dNumericClosingPrice;
                }