C# 用c从foreach打印一行
我试图从匹配符号列表中打印符号trimmedLine和值,但它会打印每个符号的所有有效符号的所有值。我尝试不使用foreach循环,但它会打印最后搜索的符号的值,这是无效的。以下是我当前的方法代码:C# 用c从foreach打印一行,c#,printing,symbols,C#,Printing,Symbols,我试图从匹配符号列表中打印符号trimmedLine和值,但它会打印每个符号的所有有效符号的所有值。我尝试不使用foreach循环,但它会打印最后搜索的符号的值,这是无效的。以下是我当前的方法代码: public void searchSymbolTable() { string searchingForFile = ""; string[] searchFile; Console.Write("Enter the name of the
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 我已将您的查找替换为一些Linq,它们将选择第一个匹配项或返回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);
}
我认为您的内部foreach应该迭代匹配符号而不是mySymbols-对吗?另外,您是否希望trimmedLine与mySybols中的多个符号匹配?将其更改为matchedSymbols并不能解决问题,尽管我更改了它,因为使用它是合理的。它仍然会打印出上次查看的值。每个符号和值的打印时间似乎与其在列表中的位置相关,即第一个符号打印一次,第二个符号打印两次。至于trimmedLine,它会找到一个符号的匹配项,因为我不允许重复。您当前的输出是什么,您希望它是什么?现在我在列中:n98、a123 98、a123 98。。。。。。它应该是n5,a123-45,a123-55。98来自符号表文件中最后一个符号的值。那么98是mySymbols中的最后一个符号?还是我误会了?在符号表中搜索匹配很好。但是,当我尝试将符号的值附加到找到的符号时,我遇到了问题。这就是每个循环的内部循环的作用,除非我没有得到正确的值。