【问题标题】:why two strings that look identical are not same?为什么两个看起来相同的字符串不相同?
【发布时间】:2018-05-09 14:49:49
【问题描述】:

我是 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

【问题讨论】:

  • 您要比较的 f 的值是多少?你能调试一下看看值吗?
  • 您是否尝试在“if”上放置一个调试点,检查值?
  • 首先我会将 Trim 放在 TextBox.Text 上,而不是放在 nameRepair 的返回值上
  • 相同的字符串也相同。如果你认为你有一些不同的东西,第一步是向我们展示这两个字符串的内容。你甚至没有这样做。我建议学习使用调试器。
  • var savedfiles 获取文件列表,但SavedFilesforeach 循环中用作源。不清楚。使用Path.Combine() 将路径片段(目录、文件名等)放在一起。

标签: c# .net string textbox bunifu


【解决方案1】:

我不确定这是导致问题的原因。但我确实知道这是一个大到值得回答的问题,因为如果它现在没有引起你的问题,它会在中为你引起一个问题未来

字符串比较区分大小写。这意味着,在您的代码行中:

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

... 或类似的。看起来不太好;不过,也不存在可能的错误。

【讨论】:

    猜你喜欢
    • 2017-07-31
    • 2016-05-22
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    相关资源
    最近更新 更多