【发布时间】:2014-09-24 14:24:36
【问题描述】:
我正在尝试打印符号 (trimmedLine) 和列表中的值 (matchedSymbols),但它会打印每个符号的所有有效符号的所有值。我尝试不使用 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();
}
}
}
}
【问题讨论】:
-
我认为你的内部 foreach 应该迭代
matchedSymbols而不是mySymbols- 对吗?另外,您是否希望trimmedLine匹配mySybols中的多个符号? -
将其更改为matchedSymbols 并不能解决问题,尽管我更改了它,因为应该使用它是有道理的。它仍然打印出它查看的最后一个值。每个符号和值的打印次数似乎与其在列表中的位置相关(即第一个符号打印一次,第二个符号打印两次)。至于 trimmedLine,它会找到一个符号的匹配项,因为我不允许重复。
-
您目前的输出究竟是什么,您期望它是什么?
-
现在我得到(在列中):N 98,a123 98,A123 98......它应该是 N 5,a123 -45,A123 -55。 98 来自我的符号表文件中最后一个符号的值。
-
那么 98 是“mySymbols”中的最后一个符号?还是我误会了?