方法调用bool值无效

本文关键字:无效 bool 调用 方法 | 更新日期: 2023-09-27 17:49:57

我有一段工作代码,当它在正在读取的文本文件中遇到错误时,它会将该文本着色以突出显示它,因为它被写回新文件。

    if (item.LogEntry.ToUpper().Contains("Error='"Device Not Found'"".ToUpper()))
    {
       //Write out to new file in red to highlight error
    }
    else
    {
      //Write out to new file as normal
    }

我试图在一个名为GetCriticalErrors()的方法中编写所有这些。我使用bool在发现错误时返回true或false。这是我目前掌握的信息。

    bool aCriticalError;
    public bool GetCriticalErrors(string logEntry)
    {
        foreach (var item in logEntry.ToUpper())
        {
            if (item.ToString().Contains("Error='"Device Not Found'"".ToUpper()))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        return aCriticalError;
    }

我像这样调用这个方法

    if (GetCriticalErrors(item.LogEntry) == true)
    {
       //Write out to new file in red to highlight error
    }
    else
    {
        //Write out to new file as normal
    }

问题是这种使用方法的方式不起作用。我不知道为什么?它不会抛出任何错误。它只是没有为新写入的文件中的错误文本着色。原来的代码工作,但我需要把它放入一个方法,传入item.LogEntry。有人能看出我哪里出了问题吗?

另外,为了回答指出的问题,我将在许多字符串中搜索许多不同的错误消息。这不仅仅是一个错误,它可能会出现很多次。

方法调用bool值无效

你的问题是:-

foreach (var item in logEntry.ToUpper())

logEntrystring,不是字符串的集合!你在一个字符一个字符地迭代一个字符串,所以item的类型是char, item.ToString().Contains("Error='"Device Not Found'"".ToUpper())永远不会为真。

如果你只检查一个字符串,使用:-

private readonly string errorString = "Error='"Device Not Found'"".ToUpper();
public bool GetCriticalErrors(string logEntry)
{
  return logEntry.ToUpper().Contains(errorString);
}

如果你检查多个字符串:-

public bool GetCriticalErrors(IEnumerable<string> logEntries)
{
  return logEntries.Any(x => x.ToUpper().Contains(errorString));
}

如果你正在检查一个字符串是否有多个错误:-

private IEnumerable<string> errorStrings = new[]
{
  "Error='"Device Not Found'"".ToUpper(),
  ...
};
public bool GetCriticalErrors(string logEntry)
{
  var logEntryUpper = logEntry.ToUpper();
  return errorStrings.Any(x => logEntry.Contains(x));
}
顺便说一句,.ToUpper()并不是一种很好的不区分大小写比较方法。您可能想要考虑以下内容:-
return logEntry.IndexOf("Error='"Device Not Found'"",
                        StringComparison.OrdinalIgnoreCase) != -1;

logEntry是字符串,所以不需要使用for-each,您还需要在输入字符串和字符串上使用.ToUpper()来检查

public bool GetCriticalErrors(string logEntry)
{       
    return logEntry.ToUpper().Contains("Error='"Device Not Found'"".ToUpper());
}
//If you want to check in list of string
public bool GetCriticalErrors(List<string> logEntries)
{       
    var errorStr = "Error='"Device Not Found'"".ToUpper();
    return logEntries.Any(l => l.ToUpper().Contains(errorStr));
}