方法调用bool值不起作用

时间:2015-05-19 09:55:42

标签: c# methods boolean

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

    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。任何人都可以看到我出错的地方吗?

另外,为了回答指出的内容,我将在许多字符串上搜索许多不同的错误消息。这不仅仅是这一个错误,而且可能会多次出现。

2 个答案:

答案 0 :(得分:5)

这是你的问题: -

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;

答案 1 :(得分:2)

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));
}