Nep*_*n14 -2 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
}
Run Code Online (Sandbox Code Playgroud)
我试图在名为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;
}
Run Code Online (Sandbox Code Playgroud)
我这样称呼方法
if (GetCriticalErrors(item.LogEntry) == true)
{
//Write out to new file in red to highlight error
}
else
{
//Write out to new file as normal
}
Run Code Online (Sandbox Code Playgroud)
问题是这种使用方法的方式不起作用.我不知道为什么?它没有抛出任何错误.它只是不会在新编写的文件中着色错误文本.原始代码工作但我需要将它放入一个方法,传入item.LogEntry.任何人都可以看到我出错的地方吗?
另外,为了回答指出的内容,我将在许多字符串上搜索许多不同的错误消息.这不仅仅是这一个错误,它可能会出现很多次.
这是你的问题: -
foreach (var item in logEntry.ToUpper())
Run Code Online (Sandbox Code Playgroud)
logEntry
是string
不是字符串的集合!你是逐个字符地迭代字符串,所以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);
}
Run Code Online (Sandbox Code Playgroud)
如果您正在检查多个字符串: -
public bool GetCriticalErrors(IEnumerable<string> logEntries)
{
return logEntries.Any(x => x.ToUpper().Contains(errorString));
}
Run Code Online (Sandbox Code Playgroud)
如果您检查一个字符串是否存在多个错误: -
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));
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,.ToUpper()
是不是真的做不区分大小写的比较的一个很好的办法.您可能想要考虑以下内容: -
return logEntry.IndexOf("Error=\"Device Not Found\"",
StringComparison.OrdinalIgnoreCase) != -1;
Run Code Online (Sandbox Code Playgroud)