gpt4 book ai didi

c# - 使用枚举列表作为委托(delegate)方法

转载 作者:太空宇宙 更新时间:2023-11-03 13:39:01 26 4
gpt4 key购买 nike

我试图在枚举中列出我的类的一些方法,以便我可以根据所选枚举调用这些方法。我尝试使用 ToString() 和 GetMethod(string) 但没有成功。如果有更好的方法来动态更改我的委托(delegate)将从枚举列表中调用的方法,我将不胜感激!我是 C# 的新手,我也想知道是否有其他存储方法指针的方法。我调查了这些板上的反射,但在从枚举中转换或分配时运气不佳。

public enum funcEnum { FirstFunction, SecondFunction };

public funcEnum eList;

public delegate void Del();

public Del myDel;


void Start() {

myDel = FirstFunction; //pre-compiled assignment

myDel(); //calls 'FirstFunction()' just fine

下面这个可以在运行时改变,它通常不会在 Start() 中

    eList = funcEnum.SecondFunction; //this could be changed during runtime

myDel = eList.ToString();

明显的错误,myDel 正在寻找方法,不确定如何检索/将枚举值转换为要分配给委托(delegate)的方法,尝试调用具有分配先验知识的方法。基本上希望枚举列表包含此类中的方法名称。

    myDel(); //doesn't work

}


public void FirstFunction() {

Debug.Log("First function called");

}

public void SecondFunction() {

Debug.Log("Second function called");

}

最佳答案

您不能简单地将字符串分配给方法/委托(delegate)。而不是这个:

myDel = eList.ToString();

您可以使用 Delegate.CreateDelegate方法。

像这样的工作实例方法:

myDel = (Del)Delegate.CreateDelegate(typeof(Del), this, eList.ToString());

或者静态方法:

myDel = (Del)Delegate.CreateDelegate(typeof(Del), this.GetType(), eList.ToString());

请注意,我假设在这两种情况下,方法都是在调用代码的同一个类上定义的。您必须稍微修改一下才能调用另一个对象上的方法。

关于c# - 使用枚举列表作为委托(delegate)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17801511/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com