Сравнение string со строкой из текстового файла
При попытке сравнить на равенство обычную строку со строкой, полученной из текстового файла возвращается false, несмотря на то что эти строки по значению идентичны. Как решить эту проблему?
Это если вкратце. Дальше попробую чуть развернуть свой вопрос. Пишу небольшую программу - онлайн-тест. Все вопросы теста собраны в переменной типа List. Передо мной стоит задача: при запуске программы необходимо выполнять проверку текстового файла questions.txt - и если в нём содержится вопрос, которого нет в списке List - то добавить его туда. Если такой вопрос уже есть, то, соответственно, ничего не добавлять. Для такой проверки я создал метод LoadQuestion. Все вопросы в текстовом файле записаны в формате "Вопрос#Ответ" Проблема в том, что при сравнении строки из List со строкой из файла - всегда возвращается false, даже если строки абсолютно идентичны по значению. Таким образом, в List может добавиться вопрос, который в нём уже содержится. Почему так? Я, как видно ниже, при сравнении уже пробовал убрать пробелы через Trim, убрать непечатаемые символы, сравнить строки в едином регистре. Ничего не помогает.
В качестве примера приведу содержимое файла questions.txt:
Сколько будет два плюс два?#4
Если в List уже будет Question где question.Text == "Сколько будет два плюс два?", то код ниже не сработает и в List добавится ещё один идентичный вопрос.
public static void LoadQuestion()
{
int countEquals = 0;
using (var reader = new StreamReader("questions.txt", Encoding.UTF8))
{
foreach (Question quest in QuestionStorage.Questions)
{
reader.BaseStream.Position = 0;
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
string[] values = line.Split('#');
string question = values[0];
string cleanQuestion = Regex.Replace(question, @"[^\u0020-\u007E]", "");
if (string.Equals(quest.Text.Trim(), cleanQuestion.Trim(), StringComparison.OrdinalIgnoreCase))
{
countEquals++;
break;
}
}
}
reader.Close();
}
if (countEquals == 0)
{
using (var reader = new StreamReader("questions.txt", Encoding.UTF8))
{
reader.BaseStream.Position = 0;
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
string[] values = line.Split('#');
string question = values[0];
int answer = Convert.ToInt32(values[1]);
QuestionStorage.Questions.Add(new Question(question, answer));
}
reader.Close();
}
}
}