【发布时间】:2020-05-02 22:58:59
【问题描述】:
团结起来,我有一本字典,里面保存着很多数据。我需要访问数据、读取数据,有时还需要覆盖。我把它放在一个或多或少像
public class myClass
{
public int myNumber;
public string myString;
}
public class MyData : MonoBehaviour
{
public Dictionary<string, myClass> someData = new Dictionary<string, myClass>();
private void Awake()
{
someData.Add("one", new myClass() { myNumber = 1, myString = "first" });
someData.Add("two", new myClass() { myNumber = 2, myString = "second" });
someData.Add("three", new myClass() { myNumber = 3, myString = "third" });
}
}
为了避免每次我需要字典的数据时都必须调用gameObject.GetComponent<MyData>().someData(因为我需要在许多游戏对象和脚本中使用它)我正在考虑将字典设置为static,这将允许使用MyData.someData 引用它(并希望有更好的表现):
public static Dictionary<string, myClass> someData = new Dictionary<string, myClass>();
但是,当我尝试在其他类的Start 方法中访问字典数据时(因此应该在MyData 的Awake 方法之后执行),MyData.someData 始终是null。我不知道这是否与调用顺序有关,或者将 Dictionary 设置为静态是否存在问题。我经验不足,无法理解。
static 是字典的正确用法吗?还是有更好的解决方案?
此外,如果有一本我只想阅读但从不修改的字典,有没有办法定义它以使其保持不可变?
【问题讨论】:
标签: c# dictionary unity3d static