Строки с одинаковым содержимым не равны?

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

Этот код должен найти простой текстовый файл с запрошенным именем и выплюнуть содержимое.

С помощью файлов "test1 и test2" в " Resources/Dialogue и запросив тест1, выход

test1..test1
Found

Однако при запросе test2

test1..test2
test2..test2

Программа утверждает, что test2 неравнозначен test2.

Оба имени ta.name и dialogName являются строками, поэтому он должен тестировать равенство по контенту.

Что-то не так с моей операцией по равенству?

Теги:
unity3d
equality

3 ответа

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;
    }
 }
  • 0
    2 проблемы с этим. Во-первых, это должно быть char.IsLetterOrDigit(c) а во-вторых, это потенциально опасно, поскольку оно удаляет ВСЕ пробелы, поэтому "abc def" равно "a bcdef "
  • 0
    Исправлен код. ОП должен сообщить нам, если внутри этих строк могут быть пробелы
Показать ещё 4 комментария
1

Вы правы, "test2" должен равняться "test2". Преобразуйте строки в массивы char с помощью метода string.ToCharArray() для обнаружения проблемы. Проверьте количество символов и их значение. Возможно, это проблема кодирования.

0

Вместо использования == Оператора рекомендуется использовать метод .equals класса String для сравнения строк для равенства.

Для получения дополнительной информации обратитесь к документации msdn или qaru.site/questions/7083/...

Использование.equals вместо == должно решить вашу проблему, не прибегая к сумасшедшим хакерским обходным решениям

Ещё вопросы

Сообщество Overcoder
Наверх
Меню