From cb12c35c7af4350b0f38b6d90a15d8bd9796b8c5 Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期六, 30 十一月 2024 13:22:49 +0800
Subject: [PATCH] epa报错处理

---
 Hydro/Yw.EPAnet.Calcu.Core/04-Inp/InpInteropHelper.cs |  354 ++++++++++++++++++++++++++++++++++------------------------
 1 files changed, 207 insertions(+), 147 deletions(-)

diff --git a/Hydro/Yw.EPAnet.Calcu.Core/04-Inp/InpInteropHelper.cs b/Hydro/Yw.EPAnet.Calcu.Core/04-Inp/InpInteropHelper.cs
index e065e2a..6598cf3 100644
--- a/Hydro/Yw.EPAnet.Calcu.Core/04-Inp/InpInteropHelper.cs
+++ b/Hydro/Yw.EPAnet.Calcu.Core/04-Inp/InpInteropHelper.cs
@@ -1,6 +1,5 @@
 锘縰sing System.Text;
 using System.Text.RegularExpressions;
-//using Hydro.CommonBase;
 
 namespace Yw.EPAnet
 {
@@ -12,25 +11,26 @@
         /// <summary>
         /// 杞崲鑷矷np瀛楃涓�
         /// </summary>
-        /// <returns></returns>
-        public static string ToInpString(this Network net, CalcuResult minorResult=null)
+        public static string ToInpString(this Network network, CalcuResult minorResult = null)
         {
-            string tempString = "";
-            var tempPath = Path.Combine(Directory.GetCurrentDirectory(), @"template\template.inp");
-
-            if (!File.Exists(tempPath))
+            //妯℃澘鏂囦欢
+            var templateFilePath = TemplateHelper.GetPath();
+            if (!File.Exists(templateFilePath))
             {
-                throw new Exception("妯℃澘鏂囦欢涓嶅瓨鍦�," + tempPath);
+                throw new Exception("妯℃澘鏂囦欢涓嶅瓨鍦�," + templateFilePath);
             }
+            var templateString = File.ReadAllText(templateFilePath);
 
-            tempString = File.ReadAllText(tempPath);
-            StringBuilder statusStringBuilder = new StringBuilder();
-            statusStringBuilder.AppendLine(";ID              \tStatus/Setting\r\n");
+            //鐘舵��
+            var statusSb = new StringBuilder();
+            statusSb.AppendLine(";ID              \tStatus/Setting\r\n");
 
-            StringBuilder emitterStringBuilder = new StringBuilder();
-            emitterStringBuilder.AppendLine(";Junction        \tCoefficient");
+            //鎵╂暎鍣�
+            var emitterSb = new StringBuilder();
+            emitterSb.AppendLine(";Junction        \tCoefficient");
 
-            StringBuilder coorStringBuilder = new StringBuilder();
+            //鍧愭爣
+            var coorStringBuilder = new StringBuilder();
             coorStringBuilder.AppendLine(";Node            	X-Coord           	Y-Coord");
 
             Dictionary<string, string> dictExchange = new Dictionary<string, string>() {
@@ -45,119 +45,146 @@
                 {"{curve}","{7}" },
                 {"{emitters}","{8}" },
             };
-            dictExchange.ToList().ForEach(m => tempString = tempString.Replace(m.Key, m.Value));
+            dictExchange.ToList().ForEach(m => templateString = templateString.Replace(m.Key, m.Value));
 
-            StringBuilder junctionStringBuilder = new StringBuilder();
-
+            //杩炴帴鑺傜偣
+            var junctionStringBuilder = new StringBuilder();
             junctionStringBuilder.AppendLine(";ID              	Elev        	Demand      	Pattern         Type");
-
-            net.Junctions.ForEach(o =>
+            //杩炴帴鑺傜偣澶勭悊
+            network.Junctions?.ForEach(x =>
             {
-                var pTemp = o.DemandPattern;
-                if (string.IsNullOrEmpty(pTemp) || pTemp == ";" || pTemp == "_") pTemp = "";
-
-                junctionStringBuilder.AppendLine($"{o.Id}\t{o.Elev}\t{o.Demand}\t{pTemp}\t;\t" + $"0\tJunction");
-                coorStringBuilder.AppendLine(o.Id + "    " + o.Position.X + "    " + o.Position.Y);
-
-            });
-            net.Meters.ForEach(o =>
-            {
-                var pTemp = o.DemandPattern;
-                if (string.IsNullOrEmpty(pTemp) || pTemp == ";" || pTemp == "_") pTemp = "";
-
-                junctionStringBuilder.AppendLine($"{o.Id}\t{o.Elev}\t{o.Demand}\t{pTemp}\t;\t" + $"0\tMeters");
-                coorStringBuilder.AppendLine(o.Id + "    " + o.Position.X + "    " + o.Position.Y);
-            });
-            net.Nozzles.ForEach(o =>
-            {
-                var pTemp = o.DemandPattern;
-                if (string.IsNullOrEmpty(pTemp) || pTemp == ";" || pTemp == "_") pTemp = "";
-                junctionStringBuilder.AppendLine($"{o.Id}\t{o.Elev}\t{o.Demand}\t{pTemp}\t;\t" + $"0\tNozzle\t{o.Coefficient}");
-                double Coe = o.Coefficient * Math.Pow(10 / 101.972, 0.5) / 1000 * 60;
-                emitterStringBuilder.AppendLine(o.Id + "    " + Coe);
-                coorStringBuilder.AppendLine(o.Id + "    " + o.Position.X + "    " + o.Position.Y);
-            });
-
-            string junctionString = junctionStringBuilder.ToString();
-
-            StringBuilder reservoirStringBuilder = new StringBuilder();
-
-            reservoirStringBuilder.AppendLine(";ID              	Head        	Pattern ");
-
-            net.Reservoirs.ForEach(o =>
-            {
-                reservoirStringBuilder.AppendLine($"{o.Id}\t{o.Head}\t{o.HeadPattern}\t;\t" + $"0\t{o.PoolElev}");
-                coorStringBuilder.AppendLine(o.Id + "    " + o.Position.X + "    " + o.Position.Y);
-            });
-            string reserverString = reservoirStringBuilder.ToString();
-
-            StringBuilder tankStringBuilder = new StringBuilder();
-
-            tankStringBuilder.AppendLine(";ID              	Elevation   	InitLevel   	MinLevel    	MaxLevel    	Diameter    	MinVol      	VolCurve        	Overflow");
-
-            net.Tanks.ForEach(o =>
-            {
-
-                // tankStringBuilder.AppendLine($"{o.Id}\t{o.PoolElev}\t{o.InitLevel}\t{o.MinLevel}\t{o.MaxLevel}\t{o.Diameter}\t{o.MinVol}\t{o.VolCurve}\t{o.Overflow}\t;\t");// + $"0");
-                tankStringBuilder.AppendLine($"{o.Id}\t{o.PoolElev}\t{o.InitLevel}\t{o.MinLevel}\t{o.MaxLevel}\t{o.Diameter}\t{o.MinVol}\t{o.VolCurve}\t;\t");// + $"0");
-                coorStringBuilder.AppendLine(o.Id + "    " + o.Position.X + "    " + o.Position.Y);
-            });
-            string tankString = tankStringBuilder.ToString();
-
-            StringBuilder pipeStringBuilder = new StringBuilder();
-
-            pipeStringBuilder.AppendLine(";ID              	Node1           	Node2           	Length      	Diameter    	Roughness   	MinorLoss   	Status");
-
-            net.Pipes.ForEach(o =>
-            {
-                if (o.Roughness == 0) o.Roughness = 110;
-                string statusString = o.LinkStatus == PipeStatus.Closed ? "CLOSED" : "";
-                double MinorLoss = o.MinorLoss;
-                if (minorResult!=null) MinorLoss+= minorResult.LinkDict[o.Id].MinorlossCoff;
-                
-                pipeStringBuilder.AppendLine($"{o.Id}\t{o.StartNode.Id}\t{o.EndNode.Id}\t{o.Length}\t{o.Diameter}\t{o.Roughness}\t{MinorLoss}\t{statusString}\t;\t");// + $"{p.Level}");
-                if (o.LinkStatus != PipeStatus.Open)
+                var demandPattern = x.DemandPattern;
+                if (string.IsNullOrEmpty(demandPattern) || demandPattern == ";" || demandPattern == "_")
                 {
-                    statusStringBuilder.AppendLine(o.Id + "\t" + statusString);
+                    demandPattern = string.Empty;
+                }
+                junctionStringBuilder.AppendLine($"{x.Id}\t{x.Elev}\t{x.Demand}\t{demandPattern}\t;\t" + $"0\tJunction");
+                coorStringBuilder.AppendLine(x.Id + "    " + x.Position.X + "    " + x.Position.Y);
+            });
+
+            network.GetAllCouplings()?.ForEach(x =>
+            {
+                var demandPattern = x.DemandPattern;
+                if (string.IsNullOrEmpty(demandPattern) || demandPattern == ";" || demandPattern == "_")
+                {
+                    demandPattern = string.Empty;
+                }
+                junctionStringBuilder.AppendLine($"{x.Id}\t{x.Elev}\t{x.Demand}\t{demandPattern}\t;\t" + $"0\tCoupling");
+                coorStringBuilder.AppendLine(x.Id + "    " + x.Position.X + "    " + x.Position.Y);
+            });
+
+            network.GetAllInstruments()?.ForEach(x =>
+            {
+                var demandPattern = x.DemandPattern;
+                if (string.IsNullOrEmpty(demandPattern) || demandPattern == ";" || demandPattern == "_")
+                {
+                    demandPattern = string.Empty;
+                }
+                junctionStringBuilder.AppendLine($"{x.Id}\t{x.Elev}\t{x.Demand}\t{demandPattern}\t;\t" + $"0\tInstrument");
+                coorStringBuilder.AppendLine(x.Id + "    " + x.Position.X + "    " + x.Position.Y);
+            });
+
+            //姘磋〃澶勭悊
+            network.Meters?.ForEach(x =>
+            {
+                var demandPattern = x.DemandPattern;
+                if (string.IsNullOrEmpty(demandPattern) || demandPattern == ";" || demandPattern == "_")
+                {
+                    demandPattern = "";
+                }
+                junctionStringBuilder.AppendLine($"{x.Id}\t{x.Elev}\t{x.Demand}\t{demandPattern}\t;\t" + $"0\tMeters");
+                coorStringBuilder.AppendLine(x.Id + "    " + x.Position.X + "    " + x.Position.Y);
+            });
+            //鍠峰ご澶勭悊
+            network.Nozzles?.ForEach(x =>
+            {
+                var demandPattern = x.DemandPattern;
+                if (string.IsNullOrEmpty(demandPattern) || demandPattern == ";" || demandPattern == "_")
+                {
+                    demandPattern = "";
+                }
+                junctionStringBuilder.AppendLine($"{x.Id}\t{x.Elev}\t{x.Demand}\t{demandPattern}\t;\t" + $"0\tNozzle\t{x.Coefficient}");
+                double coefficient = x.Coefficient * Math.Pow(10 / 101.972, 0.5) / 1000 * 60;
+                emitterSb.AppendLine(x.Id + "    " + coefficient);
+                coorStringBuilder.AppendLine(x.Id + "    " + x.Position.X + "    " + x.Position.Y);
+            });
+            var junctionString = junctionStringBuilder.ToString();
+
+            //姘村簱澶勭悊
+            var reservoirSb = new StringBuilder();
+            reservoirSb.AppendLine(";ID              	Head        	Pattern ");
+            network.Reservoirs?.ForEach(x =>
+            {
+                reservoirSb.AppendLine($"{x.Id}\t{x.Head}\t{x.HeadPattern}\t;\t" + $"0\t{x.PoolElev}");
+                coorStringBuilder.AppendLine(x.Id + "    " + x.Position.X + "    " + x.Position.Y);
+            });
+            string reserverString = reservoirSb.ToString();
+
+            //姘存睜澶勭悊
+            var tankSb = new StringBuilder();
+            tankSb.AppendLine(";ID              	Elevation   	InitLevel   	MinLevel    	MaxLevel    	Diameter    	MinVol      	VolCurve        	Overflow");
+            network.GetTanks()?.ForEach(o =>
+            {
+                // tankStringBuilder.AppendLine($"{o.Id}\t{o.PoolElev}\t{o.InitLevel}\t{o.MinLevel}\t{o.MaxLevel}\t{o.Diameter}\t{o.MinVol}\t{o.VolCurve}\t{o.Overflow}\t;\t");// + $"0");
+                tankSb.AppendLine($"{o.Id}\t{o.PoolElev}\t{o.InitLevel}\t{o.MinLevel}\t{o.MaxLevel}\t{o.Diameter}\t{o.MinVol}\t{o.VolCurve}\t;\t");// + $"0");
+                coorStringBuilder.AppendLine(o.Id + "    " + o.Position.X + "    " + o.Position.Y);
+            });
+            string tankString = tankSb.ToString();
+
+            //绠¢亾澶勭悊
+            var pipeSb = new StringBuilder();
+            pipeSb.AppendLine(";ID              	Node1           	Node2           	Length      	Diameter    	Roughness   	MinorLoss   	Status");
+            network.GetAllPipes()?.ForEach(x =>
+            {
+                if (x.Roughness == 0)
+                {
+                    x.Roughness = 110;
+                }
+                string statusString = x.LinkStatus == PipeStatus.Closed ? "CLOSED" : "";
+                pipeSb.AppendLine($"{x.Id}\t{x.StartNode.Id}\t{x.EndNode.Id}\t{x.Length}\t{x.Diameter}\t{x.Roughness}\t{x.MinorLoss}\t{statusString}\t;\t");// + $"{p.Level}");
+                if (x.LinkStatus != PipeStatus.Open)
+                {
+                    statusSb.AppendLine(x.Id + "\t" + statusString);
                 }
             });
+            string pipeString = pipeSb.ToString();
 
-            string pipeString = pipeStringBuilder.ToString();
-
-            StringBuilder valveStringBuilder = new StringBuilder();
-
-            valveStringBuilder.AppendLine(";ID              	Node1           	Node2           	Diameter    	Type	Setting     	MinorLoss  ");
-
-            net.Valves.ForEach(o =>
+            //闃�闂ㄥ鐞�
+            var valveSb = new StringBuilder();
+            valveSb.AppendLine(";ID              	Node1           	Node2           	Diameter    	Type	Setting     	MinorLoss  ");
+            network.Valves?.ForEach(x =>
             {
-                valveStringBuilder.AppendLine($"{o.Id}\t{o.StartNode.Id}\t{o.EndNode.Id}\t{o.Diameter:F4}\t{o.ValveType}\t{o.ValveSetting}\t{o.MinorLoss:F4}\t;\t");// + $"0");
-                if (!string.IsNullOrEmpty(o.LinkStatus))
-                    statusStringBuilder.AppendLine(o.Id + "\t" + o.LinkStatus);
+                valveSb.AppendLine($"{x.Id}\t{x.StartNode.Id}\t{x.EndNode.Id}\t{x.Diameter:F4}\t{x.ValveType}\t{x.ValveSetting}\t{x.MinorLoss:F4}\t;\t");// + $"0");
+                if (!string.IsNullOrEmpty(x.LinkStatus))
+                {
+                    statusSb.AppendLine(x.Id + "\t" + x.LinkStatus);
+                }
             });
-            
-
-            net.GetAllValveLikes().ForEach(o =>
+            network.GetAllResistances()?.ForEach(x =>
             {
-                string type= "";
-                if (o is HeatExchanger) type = "HeatExchanger";
-                if (o is AirCompressor) type = "AirCompressor";
-                valveStringBuilder.AppendLine($"{o.Id}\t{o.StartNode.Id}\t{o.EndNode.Id}\t{o.Diameter:F4}\tGPV\t{o.FlowHeadLossCurve}\t{o.MinorLoss:F4}\t;\t{type}");// + $"0");
-                if (!string.IsNullOrEmpty(o.LinkStatus))
-                    statusStringBuilder.AppendLine(o.Id + "\t" + o.LinkStatus);
+                string type = null;
+                if (x is Exchanger)
+                {
+                    type = "Exchanger";
+                }
+                else if (x is Compressor)
+                {
+                    type = "Compressor";
+                }
+                valveSb.AppendLine($"{x.Id}\t{x.StartNode.Id}\t{x.EndNode.Id}\t{x.Diameter:F4}\tGPV\t{x.CurveQL}\t{x.MinorLoss:F4}\t;\t{type}");// + $"0");
+                if (!string.IsNullOrEmpty(x.LinkStatus))
+                {
+                    statusSb.AppendLine(x.Id + "\t" + x.LinkStatus);
+                }
             });
+            string valveString = valveSb.ToString();
 
-
-            string valveString = valveStringBuilder.ToString();
-
-
-            StringBuilder pumpStringBuilder = new StringBuilder();
-
-            pumpStringBuilder.AppendLine(";ID              	Node1           	Node2           	Parameters  ");
-
-            net.Pumps.ForEach(o =>
+            //姘存车澶勭悊
+            var pumpSb = new StringBuilder();
+            pumpSb.AppendLine(";ID              	Node1           	Node2           	Parameters  ");
+            network.Pumps?.ForEach(o =>
             {
-                pumpStringBuilder.AppendLine($"{o.Id}\t{o.StartNode.Id}\t{o.EndNode.Id}\tHead\t{o.CurveQH}\t;\t");// + $"0");
-
+                pumpSb.AppendLine($"{o.Id}\t{o.StartNode.Id}\t{o.EndNode.Id}\tHead\t{o.CurveQH}\t;\t");// + $"0");
                 string statusString = null;
                 if (o.LinkStatus == PipeStatus.Closed)
                 {
@@ -165,17 +192,18 @@
                 }
                 else
                 {
-                    if (o.SpeedRatio == null) 
-                        statusString= "\tOPEN";
+                    if (o.SpeedRatio == null)
+                        statusString = "\tOPEN";
                     else
                         statusString = $"\t{o.SpeedRatio}";
                 }
-
-                statusStringBuilder.AppendLine(o.Id + statusString);
+                statusSb.AppendLine(o.Id + statusString);
             });
-            string pumpString = pumpStringBuilder.ToString();
-            StringBuilder curveStringBuilder = new StringBuilder();
-            curveStringBuilder.AppendLine(@";ID              	X-Value     	Y-Value
+            string pumpString = pumpSb.ToString();
+
+            //鏇茬嚎澶勭悊
+            var curveSb = new StringBuilder();
+            curveSb.AppendLine(@";ID              	X-Value     	Y-Value
                                             ;HEADLOSS: 
                                              GPVDefault      	0           	0     
                                              GPVDefault      	100         	0           
@@ -208,22 +236,22 @@
                                              PumpDefault     	750         	31.44       
                                              PumpDefault     	777.7777778 	30.37       
                                              PumpDefault     	805.5555556 	29.27    ");
-
-            net.Curves.ForEach(o =>
+            network.Curves?.ForEach(o =>
             {
                 var curvePtList = o.CurveData?.OrderBy(x => x.X).ToList();
                 foreach (var curvePt in curvePtList)
                 {
-                    curveStringBuilder.AppendLine($"{o.Id}  {curvePt.X} {curvePt.Y}");
+                    curveSb.AppendLine($"{o.Id}  {curvePt.X} {curvePt.Y}");
                 }
                 //curveStringBuilder.AppendLine(o.ToString());
             });
-            string curveString = curveStringBuilder.ToString();
+            string curveString = curveSb.ToString();
+
             string coorString = coorStringBuilder.ToString();
             string output = "";
-            string emitterString = emitterStringBuilder.ToString();
-            string statusString = statusStringBuilder.ToString();
-            output = tempString;
+            string emitterString = emitterSb.ToString();
+            string statusString = statusSb.ToString();
+            output = templateString;
             output = ReplaceContent(output, "JUNCTIONS", junctionString);
             output = ReplaceContent(output, "RESERVOIRS", reserverString);
             output = ReplaceContent(output, "TANKS", tankString);
@@ -275,18 +303,17 @@
 
             return replacedText;
         }
+
         /// <summary>
         /// 浠嶪np瀛楃涓蹭腑瑙f瀽
         /// </summary>
-        /// <param name="inpString">inp瀛楃涓�</param>
-        /// <returns></returns>
         public static Network FromInpString(string inpString)
         {
             string InpPath = inpString;
             var net = new Network();
             if (InpPath == null || !File.Exists(InpPath)) return null;
             List<InpCoor> points = new List<InpCoor>();
-         
+
             StreamReader sr = new StreamReader(InpPath);
             //try
             {
@@ -419,19 +446,15 @@
                                     float minorLoss;
                                     if (float.TryParse(parts[6], out minorLoss))
                                         p.MinorLoss = minorLoss;
-                                    p.LinkStatus = parts.Length > 7 ? PipeStatus.Closed : PipeStatus.Open;
-                                    //int level;
-                                    //if (int.TryParse(parts[8], out level))
-                                    //    p.Level = level;
+                                    p.LinkStatus = parts.Length > 7 ? (parts[7].ToUpper().Contains("CLOSE")? PipeStatus.Closed : PipeStatus.Open) : PipeStatus.Open;
+                                    
                                     net.Pipes.Add(p);
                                 }
                                 break;
                             case "VALVES":
                                 {
-                                    
 
-                                    
-                                    if (parts[-2] == "HeatExchanger")
+                                    if (parts[-2] == "Exchanger")
                                     {
                                         InpHeatExchanger valve = new InpHeatExchanger();
                                         valve.Id = parts[0];
@@ -443,14 +466,14 @@
                                         float diameter;
                                         if (float.TryParse(parts[3], out diameter))
                                             valve.Diameter = diameter;
-                                        valve.FlowHeadLossCurve = parts[5];
+                                        valve.CurveQL = parts[5];
                                         float minorLoss;
                                         if (float.TryParse(parts[6], out minorLoss))
                                             valve.MinorLoss = minorLoss;
-                                       
-                                        net.HeatExchangers.Add(valve);
+
+                                        net.Exchangers.Add(valve);
                                     }
-                                    else if (parts[-2] == "AirCompressor")
+                                    else if (parts[-2] == "Compressor")
                                     {
                                         InpAirCompressor valve = new InpAirCompressor();
                                         valve.Id = parts[0];
@@ -462,12 +485,12 @@
                                         float diameter;
                                         if (float.TryParse(parts[3], out diameter))
                                             valve.Diameter = diameter;
-                                        valve.FlowHeadLossCurve = parts[5];
+                                        valve.CurveQL = parts[5];
                                         float minorLoss;
                                         if (float.TryParse(parts[6], out minorLoss))
                                             valve.MinorLoss = minorLoss;
 
-                                        net.AirCompressors.Add(valve);
+                                        net.Compressors.Add(valve);
                                     }
                                     else
                                     {
@@ -491,7 +514,44 @@
 
                                 }
                                 break;
+                            case "PUMPS":
+                                {
+                                    InpPump pump = new InpPump();
+                                    
+                                    pump.Id = parts.ToString(0, null);
 
+                                    // 鍙栧嚭Node1鍜孨ode2涓殑瀛楁瘝閮ㄥ垎锛屼緥濡傗�淪201326593鈥濊鍙栧嚭涓衡��201326593鈥�
+                                    pump.Node1 = parts.ToString(1, null); // Regex.Replace(parts[1], "[^0-9]", "");
+                                    pump.Node2 = parts.ToString(2, null);// parts.ToString(2, null); // Regex.Replace(parts[2], "[^0-9]", "");
+                                    int index = 3;
+                                    string label = null;
+                                    while ((label = parts.ToString(index, null)) != null)
+                                    {
+                                        label = label.ToUpper();
+                                        switch (label)
+                                        {
+                                            case "HEAD":
+                                                pump.CurveQH = parts.ToString(index + 1, "PumpDefault");
+                                                break;
+                                            case "SPEED":
+                                                pump.SpeedRatio = parts.ToFloat(index + 1, 0);
+                                                break;
+                                        }
+                                        index += 2;
+                                    }
+                                    //pump.Diameter = parts.ToFloat(3, 0);
+
+                                    pump.LinkStatus = "OPEN";
+                                    net.Pumps.Add(pump);
+                                }
+                                break;
+                            case "STATUS":
+                                {
+                                    Link link = net.GetAllLinks().Find(l => l.Id == parts.ToString(0, null));
+                                    if (link != null)
+                                        link.LinkStatus = parts[1];
+                                }
+                                break;
                             case "COORDINATES":
                                 {
                                     string id = parts[0];
@@ -549,7 +609,7 @@
                     J.Position = new Position2d();
                     J.Position.X = coor.Position.X;
                     J.Position.Y = coor.Position.Y;
-
+                    
                     k1++;
                 }
                 #endregion
@@ -577,7 +637,7 @@
                         //throw new Exception($"鏈壘鍒癓ink[{p.Id}]鐨勮捣濮嬭妭鐐筟{((IInpParser)p).Node1}]");
                     }
                     p.StartNode = J;
-                    if (J.Links == null) J.Links = new List<ILink>();
+                    if (J.Links == null) J.Links = new List<Link>();
                     J.Links.Add(p);
                     k2++;
                 }
@@ -602,7 +662,7 @@
                         //throw new Exception($"鏈壘鍒癓ink[{p.Id}]鐨勭粓姝㈣妭鐐筟{((IInpParser)p).Node2}]");
                     }
                     p.EndNode = J;
-                    if (J.Links == null) J.Links = new List<ILink>();
+                    if (J.Links == null) J.Links = new List<Link>();
                     J.Links.Add(p);
                     k2++;
                 }

--
Gitblit v1.9.3