2016-02-11 27 views
3

在Unity项目特色爆炸你经常这样做我有眼泪,因为我不知道如何使用Action初始化字典?

没问题,但它让我高兴,如果你能做到这一点...

private Dictionary<string, System.Action> explosions = 
    new Dictionary<string, System.Action>() 
    { 
    {"huge", SomeCall}, 
    {"huge", SomeCall}, 
    etc 
    }; 

这将让我更快乐.. 。当你睡得更好时,你知道这种感觉,用更多的微笑享受美食?

当然,这并不工作,因为:

资产/脚本/对象/ FLITE组/ ReallyTremendousExplosions.cs(134,26):错误CS0236:一个字段初始不能引用非静态场,方法或属性'ReallyTremendousExplosions.SomeCall()'

任何人都可以为我带来和平吗?

有没有办法解决这个事实,你必须在初始化时做到这一点?

+5

更少的戏剧是适当的;-) –

回答

1

看来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}, 
     }; 
    } 
    ... 
    } 
+0

嗨迪米特里 - 是的,**这正是我所做的**。 (在代码示例中'prep'(准备)显然是一个初始化程序)。我想知道是否有办法**解决这个问题并进行字段初始化!**也许使用..委托或其他?它使我非常说我必须在构造函数中进行初始化:/ – Fattie

+0

@Joe Blow:不,没有这种方法;在* .Net *中(不像* Java *),您不能在字段初始值设定项中引用非静态字段/方法/属性...。 –

+0

嗨德米特.......当然有一些方法呢? :/:/:/ – Fattie

3

我爱的字典初始化和我用他们所有的时间。我感到你的眼泪。

答案是在你的问题中,使用委托!

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 /单声道完全测试

+0

神圣爆炸。只要你等到我尝试了这一点! “OMGC#” – Fattie

+1

这实际上有效。你不'真的需要委托声明寿,你可以通过行动。请注意,它需要传递调用对象dict [str](this); – Everts

+0

说,我不知道如何正确调用或调用函数@ Tewr,一旦你有一个'Explosions [“巨大的”]'..?抱歉!我假设'爆炸[“巨大”](这个);'但是你知道他们说什么,“假设”从“你”和“我”中制造一个“屁股”:) – Fattie

相关问题