2014-09-24 24 views
0

我試圖從列表(matchedSymbols)中打印符號(trimmedLine)和值,但是它會打印每個符號的所有有效符號的所有值。我嘗試不使用foreach循環,但它然後輸出搜索到的最後一個符號的值,這是無效的。下面是我對目前的方法代碼:從c#的foreach打印一行#

public void searchSymbolTable() 
    { 
     string searchingForFile = ""; 
     string[] searchFile; 

     Console.Write("Enter the name of the search file: "); 
     searchingForFile = @"../../" + Console.ReadLine(); 
     Console.WriteLine("Searching symbol table..."); 
     Console.WriteLine(); 

     while (!File.Exists(searchingForFile)) 
     { 
      Console.Write("File not found, try again or enter 1 to exit: "); 
      searchingForFile = @"../../" + Console.ReadLine(); 
      if (searchingForFile == @"../../1") 
      { 
       Environment.Exit(1); 
      } 
     } 

     searchFile = File.ReadAllLines(searchingForFile); 


     matchedSymbols = new List<symbols>(); 
     var space = ' '; 

     foreach (string line in searchFile) 
     { 
      try 
      { 
       var trimmedLine = line.Trim(); 
       var tokens = trimmedLine.Split(space); 

       trimmedLine = checkSymbol(tokens[0]); 

       matchedSymbols.Add(mySymbols.ToList().Find(symName => symName.ToString() == trimmedLine)); 


       if (matchedSymbols[matchedSymbols.Count() - 1] == null) 
       { 
        throw new Exception(string.Format("ERROR - Symbol {0} not found in symbol table.", trimmedLine)); 
       } 
       else 
       { 
        foreach(symbols s in mySymbols) 
        { 

          Console.WriteLine(string.Format("{0,-10} {1}", trimmedLine, s.value)); 

        } 

       } 
      } 
      catch (Exception e) 
      { 

       Console.WriteLine(e.Message); 
       if (Console.CursorTop % 20 == 19) 
       { 
        Console.Write("Press any key to continue ..."); 
        Console.ReadKey(); 
       } 

      } 
     } 
    } 
+0

我認爲你的內部foreach應該遍歷'matchedSymbols'而不是'mySymbols' - 是否正確?另外,你是否期待'trimmedLine'匹配'mySybols'中的多個符號? – bdimag 2014-09-24 14:37:33

+0

將它更改爲matchedSymbols並不能解決問題,雖然我改變了它,因爲它應該被使用。它仍然打印出它看的最後一個值。打印每個符號和數值的時間似乎與其在列表中的位置相關(即,第一個符號被打印出一次,第二個符號被打印兩次)。至於trimmedLine,它會爲一個符號找到一個匹配,因爲我不允許重複。 – user3072102 2014-09-24 14:40:34

+1

目前你的輸出到底是什麼,你期待的是什麼? – Crabgor 2014-09-24 14:44:35

回答

0

既然你只想找一個比賽,你不需要內部的foreach ...

我曾與一些LINQ的更換你的Find這將選擇第一個匹配(或返回null)

var trimmedLine = line.Trim(); 
var tokens = trimmedLine.Split(space); 

trimmedLine = checkSymbol(tokens[0]); 

//look for the match, select the first (null if no matches) 
var matchedSymbol = mySymbols.FirstOrDefault(symName => symName.ToString() == trimmedLine); 

//if null (no match)     
if (matchedSymbol == null) 
{ 
    throw new Exception(string.Format("ERROR - Symbol {0} not found in symbol table.", trimmedLine)); 
} 
else 
{ 
    //print the match 
    Console.WriteLine(string.Format("{0,-10} {1}", trimmedLine, matchedSymbol.value)); 
    //add the match to your collection of matches 
    matchedSymbols.Add(matchedSybol); 
} 
+0

符號表中的匹配搜索正常工作。但是,當我嘗試將符號的值附加到發現的符號上時,我遇到了問題。這是每個循環的內在之處,除非我沒有得到正確的值。 – user3072102 2014-09-24 15:12:48