将csv文件放入C#中的多个值字典

时间:2017-11-08 06:09:53

标签: c# csv dictionary filehelpers

我有一个csv文件:

Name,Gender,Age ,Occupation
Joe,M,29,Doctor
Carl,M,34,Accountant
Bob,M,25,Engineer
Anna,F,32,Model

我想将此csv文件传递到字典中。字典的关键是每个人的名字,每个关键字将包含3个不同的值,即性别,年龄和职业。我正在使用Filehelper来读取csv文件。这是csv文件的类:

namespace ReadCSV
{
    [DelimitedRecord(",")]
    [IgnoreFirst(1)]
    public class Orders
    {
        public String Name;

        public String Gender;

        public Int32 Age;

        public String Occupation;
    }
}

这是主要方法:

namespace ReadCSV
{
    class Program
    {
        static void Main(string[] args)
        {
            var engine = new FileHelperEngine<Orders>();
            var records = engine.ReadFile("SampleCSV.csv");
            var dict = new Dictionary<String, dynamic>();

            foreach (var record in records)
            {
               //I need to place the csv file into the dictionary here
            }
        }
    }
}

我不确定如何将csv文件转换为具有多个值的字典。在我这样做之后,我想从字典中检索特定的键值对,例如,如果我调用:

dict["Bob"]["Age"] //ignore the syntax

应该给我25 非常感谢....

1 个答案:

答案 0 :(得分:2)

像这样填写字典:

class Program
{
    static void Main(string[] args)
    {
        var engine = new FileHelperEngine<Orders>();
        var records = engine.ReadFile("SampleCSV.csv");

        // Notice the change here. Only use dynamic if you *really* need it
        var dict = new Dictionary<String, Orders>();

        foreach (var record in records)
        {
           //either this:
           dict[record.Name] = record;

           //or this:
           dict.Add(record.Name, record);

           //(but not both!)
        }
    }
}

然后像这样引用鲍勃的年龄:

var age = dict["Bob"].Age;
//age will now be 25

你无法得到这个:

var age = dict["Bob"]["Age"];

这不是.Net字典类型的工作原理,,你所做的一切都不会改变它。如果您需要这种查找功能,则必须切换到javascript,在Orders类型上实现特殊的索引器属性,或更改字典代码以创建Dictionary<string, Dictionary<string, Object>>