C#Unity词典使用键打开.csv文件

时间:2019-01-25 13:42:20

标签: c# dictionary unity3d foreach

解决方案: 使用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!");
            }
        }
    }
}

0 个答案:

没有答案