C# 在一个方法中在两个foreach循环之间传递字符串变量
这是我的代码:C# 在一个方法中在两个foreach循环之间传递字符串变量,c#,foreach,C#,Foreach,这是我的代码: public void refresh_SID(string callsign) { // zjistime si vsechny potrebne informace o danem letu XmlNodeList lety = airplanes.SelectNodes("/vEsup/flights/LKPR/odlety/let"); XmlNodeList sids = airports.SelectNodes("/vEsup/config/a
public void refresh_SID(string callsign) {
// zjistime si vsechny potrebne informace o danem letu
XmlNodeList lety = airplanes.SelectNodes("/vEsup/flights/LKPR/odlety/let");
XmlNodeList sids = airports.SelectNodes("/vEsup/config/airports/LKPR/sidstar/sids/sid");
XmlNodeList getQfu = airplanes.SelectNodes("/vEsup/airports/airport/");
MessageBox.Show(callsign);
foreach (XmlNode let in lety) {
if(let.Attributes.GetNamedItem("callsign").Value == callsign) {
string adep = let.Attributes.GetNamedItem("adep").Value;
foreach(XmlNode letiste in getQfu) {
if(adep == letiste.Attributes.GetNamedItem("icao").Value);
string qfu = letiste.Attributes.GetNamedItem("rwy").Value;
}
string depRunway = let.Attributes.GetNamedItem("deprwy").Value;
string type = let.Attributes.GetNamedItem("type").Value;
string exitpoint = let.Attributes.GetNamedItem("exitpoint").Value;
string rules = let.Attributes.GetNamedItem("rules").Value;
ComboBox sidRoute = new ComboBox();
Load_SID(depRunway, qfu, type, exitpoint, rules, sids, sidRoute);
}
}
}
不幸的是,我不能将两个foreach循环合并为一个,因为在第二个循环中,我需要使用第一个循环中得到的adep字符串,第二个循环是一个单独的foreach循环,因为它必须检查XML文件的不同部分。现在,当调用Load_SID方法时,qfu不存在。有什么方法可以把它放到那里吗?您得到的错误不存在,因为当您调用方法Load_SID时变量qfu不在范围内 试试这个:
...
string adep = let.Attributes.GetNamedItem("adep").Value;
string qfu = string.Empty;
foreach(XmlNode letiste in getQfu)
{
if(adep == letiste.Attributes.GetNamedItem("icao").Value);
qfu = letiste.Attributes.GetNamedItem("rwy").Value;
}
...
您正在为内部foreach单个迭代的持续时间声明qfu,当您尝试调用它时,它超出了范围。您需要在内部foreach外部声明它,当您拥有适当的值时,退出foreach并进行调用。这看起来有缺陷-您从XML中提取qfu的多个值,但在外部循环的每个迭代中只执行一个调用来加载\u SID。您希望在此调用中使用哪个值?第一个?最后?没关系,它们都是一样的?好吧,它似乎在工作,当我在代码中单击qfu时,它也会标记声明,所以我猜它是正确的,但是发生了另一个问题,当我尝试调试它时,我得到了一个未经处理的异常错误,它标记了行XmlNodeList getQfu=airplanes.SelectNodes/vEsup/airports/airport/;表示表达式必须计算为节点集。。有什么想法吗?为什么要缩进qfu=letiste….行。。。。?它不在原件中,并且任务不取决于if通知;在if的末尾。还是我只是发现了一只虫子;是的,有分号,这个缩进不影响行为,所以没关系。也许是臭虫: