[英]What is the best way to organize a lot of data which contains multiple conditions?
[英]What's the best way to organize a dictionary to exchange data?
团结起来,我有一本字典,里面保存着很多数据。 我需要访问数据、读取数据,有时还需要覆盖它。 我把它放在 class 里面,它或多或少像
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
(因为我需要在许多 GameObjects 和脚本中使用它),我正在考虑将字典设置为static
,这将允许使用MyData.someData
(并希望有更好的性能):
public static Dictionary<string, myClass> someData = new Dictionary<string, myClass>();
但是,当我尝试在其他类的Start
方法中访问 Dictionary 数据时(因此应该在MyData
的Awake
方法之后执行), MyData.someData
始终是null
。 我不知道这是否与调用顺序有关,或者将 Dictionary 设置为 static 是否有问题。 我没有足够的经验来理解。
static
是字典的正确用法吗? 还是有更好的解决方案?
此外,如果有一本我只想阅读但从不修改的字典,有没有办法定义它以使其保持不变?
在 Awake 中实例化字典。 将项目添加到开始中的字典。 Awake 总是在开始之前被调用,所以这将保证你的字典在尝试访问它之前被初始化。
将SomeData
设为 static 字段,然后您可以在整个应用程序中将其称为MyData.SomeData
。 您需要显式调用Awake()
方法才能将三个MyClass
实例添加到SomeData
字典。 您可以创建一个 static 构造函数并在其中调用Awake()
。
public class MyData : MonoBehaviour
{
public static Dictionary<string, myClass> someData = new Dictionary<string, myClass>();
static MyData()
{
Awake();
}
private static 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" });
}
}
.NET 4.5 中有一个只读字典...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.