我泪流满面,因为我不知道如何使用操作初始化字典
本文关键字:何使用 操作 初始化 字典 我不知道 泪流满面 因为 | 更新日期: 2023-09-27 18:34:16
在具有爆炸功能的Unity项目中,您经常这样做
private Dictionary<string, System.Action> explosions;
void .. initialize in your class constructor .. ()
{
explosions = new Dictionary<string, System.Action>();
explosions.Add("huge", SomeCall);
explosions.Add("huger", SomeCall);
etc
}
没问题,但如果你能做到这一点,我会很高兴的......
private Dictionary<string, System.Action> explosions =
new Dictionary<string, System.Action>()
{
{"huge", SomeCall},
{"huge", SomeCall},
etc
};
那会让我更快乐...你知道当你睡得更好,带着更多的微笑享受饭菜时的感觉吗?
当然,这是行不通的,因为:
资产/脚本/对象/flite 组/真实巨大的爆炸.cs(134,26):错误 CS0236:字段初始值设定项无法引用非静态字段、方法或属性"真的是巨大的爆炸.SomeCall()"
谁能给我带来和平?
有没有办法解决您必须在初始化时执行此操作的事实?
我喜欢字典初始值设定项,我一直在使用它们。我感受到你的眼泪。
答案在您的问题中,使用代表!
public class ReallyTremendousExplosions
{
private delegate void ExplosionFactory(ReallyTremendousExplosions source);
private Dictionary<string, ExplosionFactory> Explosions = new Dictionary<string, ExplosionFactory>()
{
{ "huge", x => x.SomeMethod() },
{ "huger", x => x.SomeMethod() }
};
private void SomeMethod()
{
//Render massive explosions...
}
public void RenderNamedExplosion(string explosionName) {
ExplosionsFactory explosionFactory;
if (!Explosions.TryGet(explosionName, out explosionFactory) {
throw new NoSuchExplosionException(explosionName);
}
explosionFactory(this);
}
}
代码在 Unity5/Mono 中经过全面测试。
似乎SomeCall
是一个非静态方法,这就是为什么你不能在字段初始值设定项中使用它的原因。但是,您可以将初始化放入构造函数中:
public class MyClass {
...
// non static method
private void SomeCall() { ... }
private Dictionary<string, System.Action> explosions;
public MyClass() {
explosions = new Dictionary<string, System.Action>() {
{"huge", SomeCall},
{"huger", SomeCall},
};
}
...
}