C# 如何将文件内容映射到现有字典c

C# 如何将文件内容映射到现有字典c,c#,file,dictionary,mapping,C#,File,Dictionary,Mapping,因此,我试图做的是基于一个唯一的项映射两个不同文件的内容,在本例中是sampleName。其中一个文件的内容先前已添加到字典中,其中包含一个具有属性的列表和一个sampleName作为键 此示例名称也出现在具有以下格式的第二个文件中: *Projectnummer;Datum;wetenschappelijke_naam;zakje;ring;klantnr "aNumber";"aDate";"scientificName";"123456";"12";"aNumber" e

因此,我试图做的是基于一个唯一的项映射两个不同文件的内容,在本例中是sampleName。其中一个文件的内容先前已添加到字典中,其中包含一个具有属性的列表和一个sampleName作为键

此示例名称也出现在具有以下格式的第二个文件中:

*Projectnummer;Datum;wetenschappelijke_naam;zakje;ring;klantnr         
"aNumber";"aDate";"scientificName";"123456";"12";"aNumber" etc..* 
如果123456是sampleName,则在以前生成的字典中也会出现这种情况

这里的问题是,对于当前代码,字典CorrectSamplesDict中的错误sampleCode中添加了错误的项。信息的添加不是基于匹配的样本号,而是基于文件中行的顺序

如何检查样本名称是否匹配,以及需要添加哪些信息

try
    {
        if (File.Exists(fileName))
        {
            bool headerCollected = false;

            int projectNumberId = -1;
            int dateId = -1;
            int scientificNameId = -1;
            int sampleNameId = -1;
            int ringId = -1;
            int customerIdId = -1;

            StreamReader reader = new StreamReader(fileName);
            while (reader.Peek() > 4)
            {
                Sample sample = new Sample();
                string line = reader.ReadLine();
                line = line.Replace("\"" , string.Empty);
                string[] lineParts = line.Split((char)59);
                switch (headerCollected)
                {
                    case false:
                        if (line.ToUpper().Contains("PROJECTNUMMER"))
                        {
                            for (int i = 0; i < lineParts.Length; i ++)
                            {
                                if (lineParts[i].ToUpper().Trim().Contains("DATUM")) { dateId = i; }
                                if (lineParts[i].ToUpper().Trim().Contains("WETENSCHAPPELIJKE_NAAM")) { scientificNameId = i; }
                                if (lineParts[i].ToUpper().Trim().Contains("ZAKJE")) { sampleNameId = i; }
                                if (lineParts[i].ToUpper().Trim().Contains("RING")) {ringId = i; }
                                if (lineParts[i].ToUpper().Trim().Contains("KLANTNR")) { customerIdId = i; }
                                if (lineParts[i].ToUpper().Trim().Contains("PROJECTNUMMER")) { projectNumberId = i; }

                            }
                            headerCollected = true;
                        }

                        break;
                    case true:


                        if (dateId != -1 && lineParts.Length > dateId) { sample.ProjectDate = lineParts[dateId].Trim(); }
                        if (sampleNameId != -1 && lineParts.Length > sampleNameId) { sample.SampleName = lineParts[sampleNameId].Trim(); }
                        if (customerIdId != -1 && lineParts.Length > customerIdId) { int.TryParse(lineParts[customerIdId].Trim(), out sample.CustomerNumber); }
                        if (projectNumberId != -1 && lineParts.Length > projectNumberId) { sample.ProjectNumber = lineParts[projectNumberId].Trim(); }
                        if (ringId != -1 && lineParts.Length > ringId) { sample.RingNumber = lineParts[ringId].Trim(); }
                        if (scientificNameId != -1 && lineParts.Length > scientificNameId) { sample.ScientificName = lineParts[scientificNameId].Trim(); }

                        List<Sample> sampleProperties = null;
                        Sample sampleVal = null;

                        if (correctSamplesDict.TryGetValue(sample.SampleName, out sampleProperties))
                        {
                            foreach (KeyValuePair<string, List<Sample>> items in correctSamplesDict)
                            {
                                foreach (Sample sampleValue in items.Value)
                                {
                                        // initializes a new object for each iteration
                                        sampleVal = new Sample();
                                        sampleProperties = new List<Sample>();

                                        // These values still are correct                                   sampleVal.HeightOne = sampleValue.HeightOne;
                                        sampleVal.HeightTwo = sampleValue.HeightTwo;
                                        sampleVal.SizeOne = sampleValue.SizeOne;
                                        sampleVal.SizeTwo = sampleValue.SizeTwo;
                                        sampleVal.SampleName = sampleValue.SampleName;

                                        // mapping goes wrong here (wrong sample information to the wrong sampleName)
                                        sampleVal.ProjectDate = sample.ProjectDate;
                                        sampleVal.ProjectNumber = sample.ProjectNumber;
                                        sampleVal.CustomerNumber = sample.CustomerNumber;
                                        sampleVal.RingNumber = sample.RingNumber;
                                        sampleVal.ScientificName = sample.ScientificName;
                                        sampleProperties.Add(sampleVal);
                                    }                                                                                      
                            }
                            correctSamplesDict[sampleVal.SampleName] = sampleProperties;
                        }


                        break;
                    default:
                        break;
                }
            }

        }
    }

在您的代码中有许多事情看起来很奇怪:

if (correctSamplesDict.TryGetValue(sample.SampleName, out sampleProperties))
{
    foreach (KeyValuePair<string, List<Sample>> items in correctSamplesDict)
    {
        foreach (Sample sampleValue in items.Value)
        {
            //skip...
        }
    }
    correctSamplesDict[sampleVal.SampleName] = sampleProperties;
}
您正在布尔变量上使用开关/大小写,而不是if/else
您正在使用一个字典您可以共享您读取@user3309936的示例文件吗?您给出的示例不清楚您在代码中实现的逻辑。第一个示例文件的内容在另一部分代码中实现并保存在字典中。我在本部分中阅读的示例具有我在问题中解释的格式。标题如下所示:Projectnummer;资料wetenschappelijke_naam;扎克耶桑普伦姆;戒指三K党。这个标题包含了所有的信息。我不太清楚我是否理解你想知道的内容。。
if (correctSamplesDict.TryGetValue(sample.SampleName, out sampleProperties))
{
    foreach (KeyValuePair<string, List<Sample>> items in correctSamplesDict)
    {
        foreach (Sample sampleValue in items.Value)
        {
            //skip...
        }
    }
    correctSamplesDict[sampleVal.SampleName] = sampleProperties;
}
if (correctSamplesDict.TryGetValue(sample.SampleName, out sampleProperties))
{
    foreach (Sample sampleValue in sampleProperties)
    {
        sampleValue.ProjectDate = sample.ProjectDate;
        sampleValue.ProjectNumber = sample.ProjectNumber;
        sampleValue.CustomerNumber = sample.CustomerNumber;
        sampleValue.RingNumber = sample.RingNumber;
        sampleValue.ScientificName = sample.ScientificName;
    }
}