почему две строки, которые выглядят одинаково, не одинаковы? - PullRequest
0 голосов
/ 09 мая 2018

Я новичок в c # и кодировании. Прошу прощения, если я задаю глупый вопрос. Я впервые использовал Directory.GetFiles() следующим образом:

var savedfiles = Directory.GetFiles(@"C:\DiaryFiles");

Теперь у меня есть текстовое поле bunifuTextbox1, в котором я пишу текст "Amogh", который является именем файла из "C: \ DiaryFiles". Затем я использую функцию nameRepair(), которая выглядит следующим образом:

private string nameRepair(string suspectfile)
{
    return  @"C:\DiaryFiles\" + suspectfile + ".akb";
}

(. Akb - это расширение). Но проблема возникает, когда я пытаюсь сделать это:

foreach(string f in SavedFiles)
    if(f.Trim() == nameRepair(form.bunifuTextbox1.text).Trim())
    {
        //this code is not executed:(
    }
    else
    {
        //this part is executed
    }

Условие для if всегда возвращает false

Что я делаю не так?

Редактировать :( Я публикую весь код)

foreach (string f in savedfiles)
{
    this.label = new Label();
    this.label.Location = new System.Drawing.Point(108, 36 + customLabels.Count * 26);
    this.label.Name = f;
    this.label.Text = (f.Replace(@"C:\DiaryFiles\","")).Replace(".akb", ""); 
    this.label.Width = f.Length * 20;
    this.label.BackColor = System.Drawing.Color.Black;
    if(f.Trim() == nameRepair(form.bunifuTextbox1.text.Trim()))
    {
        this.label.ForeColor = System.Drawing.Color.Red;
    }
    else
    {
        this.label.ForeColor = System.Drawing.Color.White;
    }       
}

Я пытался создавать ярлыки во время выполнения и хочу изменить цвет текста на ярлыках, который соответствует тексту текстового поля.

Вы можете увидеть весь проект здесь:

https://drive.google.com/open?id=1q6eqiGvWnQYV7f_t8abG1cTwbVlUIqbm

1 Ответ

0 голосов
/ 09 мая 2018

Я не уверен, что это является причиной проблемы. Но я DO знаю, что это достаточно большая проблема, чтобы заслужить ответ, потому что, если она не вызывает вашу проблему сейчас , она вызовет ее для вас в будущем .

При сравнении строк учитывается регистр. Что означает, в вашей строке кода:

if(f.Trim() == nameRepair(form.bunifuTextbox1.text).Trim())

... вы проверяете, совпадают ли строки, включая чувствительность к регистру. Теперь мы знаем, что ваша функция nameRepair явно добавляет путь:

return  @"C:\DiaryFiles\" + suspectfile + ".akb";

... все, что нужно для того, чтобы ваш другой файл имел имя / путь, например:

c:\diaryfiles\********.akb

... и ваше сравнение не сработает.

Всякий раз, когда я вижу сравнение if (string == string), если оно не проверяет строку "", я рассматриваю это как ожидающую ошибку. Вместо этого вы хотите что-то вроде:

if (stringA.Equals(stringB, StringComparison.OrdinalIgnoreCase))

... или аналогичный. Не выглядит так хорошо; однако, также не содержит возможной ошибки.

...