C# Dictionary与Action的结合使用
正确代码
如果你和我的问题一样 在Dictionary中取得的Action不知道为何执行起来是空或者后续添加了的监听没有调用 可以参考下我这种做法
先上正确代码
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using UnityEngine;
public class ZZCTEST : MonoBehaviour {
System.Action<int> act1;
System.Action<int> act2;
Dictionary<string, System.Action<int>> actDic = new Dictionary<string, System.Action<int>> ();
public void Start () {
act1 += addOne;
actDic.Add ("1", (x)=>act1(x));
actDic.Add ("2", (x)act2(x));
act1 += addTwo;
actDic["1"]?.Invoke (1);
actDic["2"]?.Invoke (1);
}
public void addOne (int x) {
UnityEngine.Debug.Log ("One"+x);
}
public void addTwo (int y) {
UnityEngine.Debug.Log ("Two"+x);
}
}
我这里是绕了一个弯在Dictionary add值的时候使用lamberb表达式去进行调用方法,这样即使在add的时候对应的action值是空的 后续才添加事件也能正确调用。