РЕШЕНИЕ: Используйте функцию .Trim () C # для удаления пробелов в функции dictionary.key или .value!
Я использую Unity и программирую на C #.
Проблема в том, что я хочу использовать строковый ключ словаря, чтобы открыть CSV-файл с тем же именем (см. Код).Проблема в том, что это не работает.C # / Unity получают правильный ключ, как строку с правильным текстом и всем, однако он не может найти файл.
Например: если я просто наберу "start / Germany" или использую переменную с таким именемоно работает.Если я использую «start /» + var.Key, это не так, хотя он точно отображается как «start / Germany».
РЕДАКТИРОВАТЬ: Еще раз уточнить: Unity не может найти файл, когда я использую("start /" + country.Key), но это происходит при использовании "start / France" или любой другой страны.В журнале он отображается как точно такая же «строка» / путь.Когда я удаляю исключение try, оно выдает: NullReferenceException: ссылка на объект не установлена на экземпляр объекта
Я проверил много разных комбинаций операторов if, но ничего не дает оператор TRUE ...
if(("start/" + country.Key) == ("start/France"))
if(("start/" + country.Key).Equals("start/France"))
if(("start/France").Equals("start/" + country.Key))
....
Однако кажется, что строка в качестве ключа в словаре используется как обычная строка в тексте, но сравнение этой строки с обычной строкой всегда ложно.Строки в словаре одинаковы!
public class LoadData : MonoBehaviour
{
public static void Load(string filename)
{
TextAsset dataFile = Resources.Load<TextAsset>("Data/" + filename);
string[] data = dataFile.text.Split(new char[] { '\n' });
string[] columnHeader = data[0].Split(new char[] { ';' });
Debug.Log("Load <" + filename + ">");
//Debug.Log("The source file has " + data.Length + " rows");
for (int i = 1; i < data.Length - 1; i++)
{
string[] row = data[i].Split(new char[] { ';' });
// Skip the row if the first cell of a row is empty
if (row[0] != "")
{
if (filename.Contains("start"))
{
LoadStartVariables(row);
}
else if (filename.Equals("countries"))
{
LoadCountries(row);
}
else if (filename.Equals("global"))
{
LoadGlobalVariables(row, columnHeader);
}
}
}
}
private static void LoadStartVariables(string[] row)
{
Debug.Log(row[0] + " = " + row[1]);
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InstantiateNewGame
{
public static void StartNewGame()
{
LoadData.Load("countries");
InstantiateCountries();
LoadData.Load("start/France");
LoadData.Load("start/Germany");
LoadData.Load("global");
}
private static void InstantiateCountries()
{
foreach (KeyValuePair<string, Country> country in Global.countries)
{
//LoadData.Load("start/" + country.Key.ToString());
try
{
LoadData.Load("start/" + country.Key);
}
catch
{
Debug.Log(country.Key + ": No File!");
}
}
}
}