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 являются строками, поэтому он должен тестировать равенство по контенту.
Что-то не так с моей операцией по равенству?
Попробуйте очистить строки от пробелов, прежде чем сравнивать их
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;
}
}
Вы правы, "test2" должен равняться "test2". Преобразуйте строки в массивы char с помощью метода string.ToCharArray() для обнаружения проблемы. Проверьте количество символов и их значение. Возможно, это проблема кодирования.
Вместо использования == Оператора рекомендуется использовать метод .equals
класса String для сравнения строк для равенства.
Для получения дополнительной информации обратитесь к документации msdn или qaru.site/questions/7083/...
Использование.equals вместо == должно решить вашу проблему, не прибегая к сумасшедшим хакерским обходным решениям
char.IsLetterOrDigit(c)
а во-вторых, это потенциально опасно, поскольку оно удаляет ВСЕ пробелы, поэтому"abc def"
равно"a bcdef "