vovgou / loxodon-framework

An MVVM & Databinding framework that can use C# and Lua to develop games
MIT License
1.86k stars 363 forks source link

ProxyType.cs的IsParameterMatch存在问题 #31

Closed Chuangludeng closed 1 year ago

Chuangludeng commented 1 year ago

原代码:

        protected bool IsParameterMatch(IProxyMethodInfo proxyMethodInfo, Type[] parameterTypes)
        {
            ParameterInfo[] parameters = proxyMethodInfo.Parameters;
            if ((parameters == null || parameters.Length == 0) && (parameterTypes == null || parameterTypes.Length == 0))
                return true;

            if (parameters != null && parameterTypes != null && parameters.Length == parameters.Length)
            {
                for (int i = 0; i < parameters.Length; i++)
                {
                    if (!parameters[i].Equals(parameterTypes[i]))
                        return false;
                }
                return true;
            }
            return false;
        }

这里parameters[i]类型和parameterTypes类型不同,Equals会永远不等,所以这里一直会往list里面添加,在运行了1个小时后变得非常巨大.同时上面parameters.Length == parameters.Length应该也是笔误了 修正后:

        protected bool IsParameterMatch(IProxyMethodInfo proxyMethodInfo, Type[] parameterTypes)
        {
            ParameterInfo[] parameters = proxyMethodInfo.Parameters;
            if ((parameters == null || parameters.Length == 0) && (parameterTypes == null || parameterTypes.Length == 0))
                return true;

            if (parameters != null && parameterTypes != null && parameters.Length == parameterTypes.Length)
            {
                for (int i = 0; i < parameters.Length; i++)
                {
                    if (parameters[i].ParameterType != parameterTypes[i])
                        return false;
                }
                return true;
            }
            return false;
        }
vovgou commented 1 year ago

好的,谢谢,我抽个时间测试一下!

vovgou commented 1 year ago

已经修改了,等会合并一些新功能,发布一个新版本。谢谢