有多个值时访问字典值元素

时间:2018-04-02 23:55:59

标签: c#

foreach (var file in d.GetFiles("*.csv"))
        {
            using (var reader = new StreamReader(file.FullName))
            {
                List<string> columns = new List<string>();
                string colLine = File.ReadLines(file.FullName).First(); // gets the first line from file.
                columns = colLine.Split(',').ToList();
                reader.ReadLine(); // skip first line

                dynamic x = new ExpandoObject();
                var eoa = (IDictionary<string, object>)x;

                while (!reader.EndOfStream)
                {
                    var line = reader.ReadLine();
                    var values = line.Split(',');
                    for (int idx = 0; idx < values.Length; idx++)
                    {
                        if (values[idx] == "\"\"")
                        {
                            values[idx] = "[BLANK]";
                        }
                    }

                    int i = 0;
                    foreach (var value in values)
                    {
                        List<string> val = new List<string>();
                        val.Add(value);

                        if (!eoa.ContainsKey(columns.ElementAt(i)))
                        {
                            eoa.Add(columns.ElementAt(i), val);
                        }
                        else
                        {
                            List<string> overwrite = new List<string>();
                            var curr = eoa[columns.ElementAt(i)];
                            foreach (var v in (dynamic)curr)
                            {
                                overwrite.Add(v);
                            }
                            overwrite.Add(value);
                            eoa[columns.ElementAt(i)] = overwrite;

                        }
                        i++;
                    }
                }
                using (StreamWriter outFile = new StreamWriter(path + @"\output.txt"))
                {
                    foreach (var entry in eoa)
                    {
                        var test = entry.Value as List;
                        outFile.Write("{0}:{1} ", entry.Key, entry.Value);
                    }
                }
            }
        }

enter image description here

我目前无法获得属于测试变量的索引的值。我尝试做test [0],但得到错误“无法将带有[]的索引应用于'object'类型的表达式。我很好奇我可以尝试的其他方法,以便可以访问属于Value的值的这些列表元素我的字典。

1 个答案:

答案 0 :(得分:1)

您的值似乎是object类型,并且错误表明您无法直接对其应用索引。您必须将其强制转换为List<string>才能使用test [0]。