public static PropertyMapping <T>[] Read(StreamReader sr) { //read head line that tells mapping count, variable names string line = sr.ReadLine(); var strs = TypeConverterEx.Split <string>(line, 1); int layer = int.Parse(strs[0]); PropertyMapping <T> [] maps = new PropertyMapping <T> [layer]; for (int l = 0; l < layer; l++) { line = sr.ReadLine(); strs = TypeConverterEx.Split <string>(line, 1); int num = int.Parse(strs[0]); line = sr.ReadLine(); var varnam = TypeConverterEx.SkipSplit <string>(line, 1); var ids = new string[num]; var values = new T[num, varnam.Length]; for (int i = 0; i < num; i++) { line = sr.ReadLine(); strs = TypeConverterEx.Split <string>(line); ids[i] = strs[0]; var row = TypeConverterEx.SkipSplit <T>(line, 1); MatrixExtension <T> .AssignRow(values, i, row); } PropertyMapping <T> map = new PropertyMapping <T>(ids, varnam, values); maps[l] = map; } return(maps); }