C# 在文件中循环并创建对象。我该如何引用它们?

C# 在文件中循环并创建对象。我该如何引用它们?,c#,file,object,csv,C#,File,Object,Csv,(变量赋值代码中有一个小错误,但现在这并不重要) 我有一个CSV文件,通过Excel打开。该文件包含多个服务(作业)。每个作业都有与其关联的公司代码。这是一个相当大的文件(可能多达5000行左右) 分包商(crew)有几个字段,比如他们的代码和电子邮件地址。 服务(作业)有作业编号、服务日期、服务描述等字段 以下是我试图实现的目标: 1) 循环浏览电子表格上的每一行 2) 在每次迭代中,我需要创建一个“作业”对象和一个“分包商”对象(如果这个公司还没有这样的对象) 3) 然后,我需要将“作业”添

(变量赋值代码中有一个小错误,但现在这并不重要) 我有一个CSV文件,通过Excel打开。该文件包含多个服务(作业)。每个作业都有与其关联的公司代码。这是一个相当大的文件(可能多达5000行左右)

分包商(crew)有几个字段,比如他们的代码和电子邮件地址。 服务(作业)有作业编号、服务日期、服务描述等字段

以下是我试图实现的目标: 1) 循环浏览电子表格上的每一行 2) 在每次迭代中,我需要创建一个“作业”对象和一个“分包商”对象(如果这个公司还没有这样的对象) 3) 然后,我需要将“作业”添加到与其关联的“分包商”对象中

最后,我需要能够访问这些分包商,并与他们相关联的服务,我将使用这些服务生成电子邮件,告诉他们,“嘿,这些是工作,这是他们需要你做的”。 以下是我目前掌握的主要代码:

InitializeComponent();
string file = "myfile.csv";
fileAddress.Text = file;
var excel = new Excel.Application();
excel.Visible = false;
excel.Workbooks.Open(file);

Excel._Worksheet sheet = excel.ActiveSheet;

Dictionary<string, Crew> crews = new Dictionary<string, Crew>();
Crew crew;
string code;
string email;
string account;
string store;
string description;
string status;
DateTime serviceDate;
var sheetLength = sheet.UsedRange.Row;

for (int i = 0; i < sheetLength; i++)
{
    // empty cell means we are done with looping through the column
    if (String.IsNullOrEmpty(sheet.Range["B" + i + 1].Value))
    {
        break;
    }

    code = sheet.Range["I"].Value + i + 1;
    email = sheet.Range["BD"].Value + i + 1;
    account = sheet.Range["C"].Value + i + 1;
    store = sheet.Range["D"].Value + i + 1;
    description = sheet.Range["F"].Value + i + 1;
    status = sheet.Range["N"].Value + i + 1;
    serviceDate = sheet.Range["G"].Value + i + 1;

    if (crews.ContainsKey(code))
    {
        ???
    }
    else
    {
        crew = new Crew(code, email);
        crews.Add(code, crew);
    }
}
InitializeComponent();
string file=“myfile.csv”;
fileAddress.Text=文件;
var excel=new excel.Application();
excel.Visible=false;
excel.Workbooks.Open(文件);
Excel.\u工作表=Excel.ActiveSheet;
字典=新字典();
船员;
字符串代码;
字符串电子邮件;
字符串帐户;
字符串存储;
字符串描述;
字符串状态;
日期时间服务日期;
var sheetLength=sheet.UsedRange.Row;
对于(int i=0;i
这就是我被困的地方:if(crews.ContainsKey(代码)) 如果这个团队已经在收集中,我需要将当前服务添加到他的列表中。 以下是船员级别的外观:

class Crew
{
    public Crew(string code, string email)
    {
        this.code = code;
        this.email = email;
    }

    public string code { get; private set; }
    public string email { get; private set; }
    List<Job> jobs;

    public void addService(Job job)
    {
        this.jobs.Add(job);
    }
}
class机组
{
公共船员(字符串代码、字符串电子邮件)
{
this.code=代码;
this.email=电子邮件;
}
公共字符串代码{get;private set;}
公共字符串电子邮件{get;private set;}
列出工作;
公共服务(职务)
{
this.jobs.Add(job);
}
}
这就是我正在使用的电子表格:
如果有更好(更快)的方式组织这些数据,请让我知道。我想逐行循环会大大降低速度。

您缺少作业类的定义,因此我无法告诉您如何实例化它,但一旦有了它,您只需执行以下操作:

if (crews.ContainsKey(code))
{
    // create job object
    crew = crews[code];
    crew.addService(job);

}
else
{
    crew = new Crew(code, email);
    crews.Add(code, crew);
}
请注意,当您第一次创建工作组时,可能意味着已经有一个作业,在这种情况下,请执行此操作

if (!crews.ContainsKey(code))
{
    crew = new Crew(code, email);
    crews.Add(code, crew);
}
// create job object
crew = crews[code];
crew.addService(job);

注意条件中的爆炸(!),如果团队不存在,则创建它,但无论哪种方式,一旦我们确定团队存在,我们将添加作业。

您所说的“将当前服务添加到其列表”是什么意思?工作清单?该分包商的服务清单。因此,如果我对我创建的第一个crew对象有一个引用var AA111,我会检查他是否在集合中,并将AA111.addService(job)用于他的作业列表(其中job基本上是CSV文件中的当前行)。问题是我没有保留对这些对象的直接引用(如果可以这样称呼的话),因此调用crew.addService(job)是行不通的。我仍然不确定我是否理解您缺少的内容。例如,为什么像杰里米这样的回答不起作用?看起来你只需要在字典中找到现有的工作人员,使用你拥有的密钥,然后添加一个你已经拥有逻辑的作业对象。他的解决方案确实有效。不管出于什么原因,当我在上面打字时,他的答案没有显示出来,真奇怪。