查找方法实例 - c#

这个问题是针对Unity3D的实用程序脚本的,但问题仅在C#中。

我为脚本提供了字符串(onClickCallbackPath),看起来像“ GameObjectName.ComponentTypeName.CallbackDelegateName”。

查找GameObject和Component没问题,但请看以下代码:

    string[] ss = onClickCallbackPath.Split ("." [0]);
    Transform onClickTarget = Tools.FindDeepChild (transform.root, ss [0]);
    MonoBehaviour[] allComponentsOnTarget = onClickTarget.GetComponents<MonoBehaviour> ();

    foreach (MonoBehaviour mb in allComponentsOnTarget) 
    {
        if (mb.GetType ().Name == ss [1]) 
        {
            MethodInfo[] methods = mb.GetType ().GetMethods (BindingFlags.Public);

            foreach (MethodInfo mi in methods) 
            {
                if (mi.Name == ss [2]) 
                {
                    // And here is how I imagine it to work, and look for something similar...
                    // but of course there is no GetInstance method in MethodInfo
                    Action a = (Action) mi.GetInstance(mb);
                    break;
                }
            }

            break;
        }
    } 

如您所见,我需要在我发现的MonoBehaviour中找到Action类型的对象(我确保它是具有正确签名的方法)。

我试图查看所有MethodInfo属性,使其具有与我正在寻找的类似的东西,还尝试在网络中找到解决方案(也在SO上找到),但没有成功。我打赌寻找解决方案的问题只是错误地命名问题。

但我希望你能理解我的问题。

任何帮助表示赞赏。

参考方案

您正在寻找的是

(Action)Delegate.CreateDelegate(typeof(Action), mb, mi)

C#:使用System.Reflection.GetFields()显示字段元数据 - c#

This question already has answers here: Closed 8 years ago. Possible Duplicate: Find a private field with Reflection?我正在尝试使用System.Reflection.GetFields()方法显示类的字段名称。问题是,仅当字段被声明为“ pu…

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制

LeetCode题解统计城市的所有灯泡

这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…

LeetCode题解黑白圆盘

一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?题解:可以用一个相机即可

LeetCode题解圆上任取三点构成锐角三角形的概率

来自字节跳动的一道几何题题解:1/4