具有相同内容的字符串不相等?

时间:2014-05-26 22:05:51

标签: c# .net unity3d equality

public string OpenDialogueFile(string dialogueName) {
    if(dialogues == null) {
        dialogues = Resources.LoadAll<TextAsset>("Dialogue");
    }
    var text = "";
    foreach(var ta in dialogues) {
        print(ta.name + ".." + dialogueName);
        if(ta.name == dialogueName) {
            print("Found");
            text = ta.text;
            break;
        }
    }
    return text;
}

此代码应找到一个包含所请求名称的纯文本文件并吐出内容。

使用Resources/Dialogue中的文件“test1 and test2”并请求test1,输出为

test1..test1
Found

当请求test2时,

test1..test2
test2..test2

该程序声称test2不等于test2。

ta.name和dialogueName都是字符串,因此它应该按内容测试相等。

我的平等操作有问题吗?

3 个答案:

答案 0 :(得分:3)

在比较之前尝试从空格中清除字符串

var cleanDialogueName = dialogueName.Trim();
foreach(var ta in dialogues) 
{
    var cleanName = ta.name.Trim();

    print(cleanName + ".." + cleanDialogueName);
    if (cleanName == cleanDialogueName)
    {
        print("Found");
        text = ta.text;
        break;
    }
 }

答案 1 :(得分:1)

你是对的,“test2”应该等于“test2”。使用string.ToCharArray()方法将字符串转换为char数组以检测问题。检查字符数及其值。也许这是一个编码问题。

答案 2 :(得分:0)

建议不要使用==运算符,而是使用String类的.equals方法来比较字符串是否相等。

如需更多信息,请参阅the msdn documentationthis stackoverflow post

使用.equals代替==可以解决您的问题,而无需诉诸疯狂的黑客解决方法