解决方案: 使用C#的.Trim()函数删除dictionary.key或.value函数中的空格!
我在C#中使用Unity和程序。
问题是我想使用字典的字符串键打开具有相同名称的csv文件(请参见代码)。问题是它不起作用。 C#/ Unity获得正确的Key,它是带有正确文本和所有内容的字符串,但是找不到文件。
例如:如果我只是输入“ start / Germany”或使用具有该名称的变量,则它可以工作。 如果我使用“ start /” + var.Key,则不会,尽管它确实显示为“ start / Germany”。
编辑: 再次说明一下:当我使用(“ start /” + country.Key)时,Unity无法找到文件,但是在使用“ start / France”或任何其他国家时,Unity找不到该文件。在日志中,它显示为完全相同的“字符串” /路径。当我删除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!");
}
}
}
}