Baku.LibqiDotNet.QiMethods.GetMethods C# (CSharp) Method

GetMethods() private static method

private static GetMethods ( QiObject qiObj ) : QiMethod>.IDictionary
qiObj QiObject
return QiMethod>.IDictionary
        private static IDictionary<string, QiMethod> GetMethods(QiObject qiObj)
        {
            //観察事実としてmObjは4要素タプルであり、第0要素にメソッド一覧が入ってる
            var mObj = qiObj.MetaObject;
            if (mObj.Count == 0)
            {
                throw new InvalidOperationException("meta object does not contains info");
            }

            var qKeys = mObj[0].GetKeys();
            var methodInfos = Enumerable
                .Range(0, qKeys.Count)
                .Select(i => qKeys[i])
                .Select(k => new QiMethodInfo(mObj[0][k]));

            var methodOverloads = new Dictionary<string, List<QiMethodInfo>>();
            foreach (var mi in methodInfos)
            {
                if (methodOverloads.ContainsKey(mi.Name))
                {
                    methodOverloads[mi.Name].Add(mi);
                }
                else
                {
                    methodOverloads[mi.Name] = new List<QiMethodInfo>() { mi };
                }
            }

            return methodOverloads.ToDictionary(
                p => p.Key,
                p => new QiMethod(qiObj, p.Value)
                );
        }