2015-05-19 2 views
-2

У меня есть рабочий фрагмент кода, который, когда он встречается с ошибкой в ​​текстовом файле, который читается, он окрашивает этот текст, чтобы выделить его, поскольку он был записан обратно в новый файл ,Метод вызова для значений bool не работает

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. Может ли кто-нибудь увидеть, где я поступил не так?

Кроме того, чтобы ответить на то, что было указано, я буду искать множество различных сообщений об ошибках по многим строкам. Это не только одна ошибка, и она может появляться много раз.

+0

Почему пустые голоса? – NepSyn14

+0

Могли ли люди с голосом прояснить причину понижения голосов? Если что-то не так с вопросом, просто дайте мне знать. – NepSyn14

ответ

5

Вот ваша проблема: -

foreach (var item in logEntry.ToUpper()) 

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

Если вы проверяете несколько строк: -

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() на самом деле не очень хороший способ сделать тематическое insensi сравнить. Вы можете вместо того, чтобы рассмотреть что-то вдоль линий: -

return logEntry.IndexOf("Error=\"Device Not Found\"", 
         StringComparison.OrdinalIgnoreCase) != -1; 
+0

Привет. Спасибо @Iain, но я буду искать через множество строк. – NepSyn14

+1

Затем вам нужно передать коллекцию строк в свой метод или вызвать свой метод изнутри foreach! –

+0

Кроме того, не используйте 'ToUpper' для сравнения - просто используйте' logEntry.Contains (searchString, StringComparer.InvariantCultureIgnoreCase) '. – Luaan

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)); 
} 
Смежные вопросы