以下代码中第49行,Storage这个类中的字典的旧value被新value取代,但是key没有被取代,求指导
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Text.RegularExpressions; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { DirectoryInfo dir = new DirectoryInfo(".");//new DirectoryInfo(".") FileInfo[] inf = dir.GetFiles(); StreamReader rd;//用于打开“A5E”文件 Storage stor = new Storage();//实例化 foreach (FileInfo finf in inf) { if (finf.Extension.Equals(".A5E")) //假如扩展名为“.A5E” { string path = finf.Name; rd = File.OpenText(path); string s = rd.ReadToEnd(); string[] sArray = s.Split("&"); // split the string into seperate strings using & Storage.counter = 0; for (int i = 0; i < sArray.Length; i++)//i是区分按照& split分开的部分 { if (i % 2 == 1) { string[] lineArray = sArray[i].Split("\n"); //利用正则表达式将字符串中的数字提取出来分别保存在小数数组中 for (int ii = 7; ii < (lineArray.Length - 3); ii++) //ii是为了区分everyline of reinforcement layers { Storage.counter++; MatchCollection vMatchs = Regex.Matches(lineArray[ii], @"((-?\d+)(\.\d+)?)");//读取出lineArray中的小数,并存在数组中 double[] vDouble = new double[vMatchs.Count]; for (int j = 0; j < vMatchs.Count; j++)//j是为了迭代读取出存储在vMatch中的每一行的小数 { vDouble[j] = double.Parse(vMatchs[j].Value);//store the number of the line into vInts array } stor.NS = vDouble[0]; stor.averageStress = vDouble[4]; Storage.Dic.Add(Storage.counter, stor);/////出现了大大的问题,字典中的旧值被新值覆盖了 } } } } } } } public class Storage { public static int counter = 0;//用于对A5E中的字典进行计数(key) public double NS { get; set; } public double averageStress { get; set; } public static SortedDictionary<int, Storage> Dic = new SortedDictionary<int, Storage>(); } }
解决方案
5
60
你的 Storage stor = new Storage(); 在循环外
那么循环内 Storage.Dic.Add(Storage.counter, stor); 添加的都是同一个对象
自然是全部 键 的值是相同的(原因是对象传递的是引用:
那么循环内 Storage.Dic.Add(Storage.counter, stor); 添加的都是同一个对象
自然是全部 键 的值是相同的(原因是对象传递的是引用:
key是有可能相同的,原因是Storage.counter = 0;你是放到 foreach (FileInfo finf in inf)里面的,假如有不止一个inf,Storage.counter会归为0,那么就有可能重复啊,是不是应该放在外面?
10
…….
原来你的问题是为什么dic里面全部的sort都是相同的。
原因5L已经回复你了,要修正的话,将那句移动到循环里面
原来你的问题是为什么dic里面全部的sort都是相同的。
原因5L已经回复你了,要修正的话,将那句移动到循环里面