Esempio n. 1
0
        private string GetMethodSignature(QiAnyValue[] args)
        {
            if (Overloads.Count == 1)
            {
                return Name + QiSignatures.MethodNameSuffix + Overloads.First().ArgumentSignature;
            }

            //オーバーロードがある場合は引数リストと見比べて適合するのがあるか判定
            var fittedMethod = Overloads.FirstOrDefault(
                ol => QiSignatureValidityChecker.CheckValidity(ol.ArgumentSignature, args)
                );

            if (fittedMethod != null)
            {
                return Name + QiSignatures.MethodNameSuffix + fittedMethod.ArgumentSignature;
            }

            throw new InvalidOperationException(
                $"Could not find proper overload for {Name}, " +
                $"args: {QiTuple.Create(args).Signature}, " +
                $"existing method signatures: {string.Join(",", Overloads.Select(ol => ol.ArgumentSignature).ToArray())}"
                );
        }
Esempio n. 2
0
 /// <summary>
 /// メソッドの引数リストと実際に渡す予定の引数を比較し、妥当な対応が取れているかを確認します。
 /// </summary>
 /// <param name="signature">ターゲットのシグネチャ(全体を囲うタプルの丸括弧を含む)</param>
 /// <param name="args">実際の引数のシグネチャ</param>
 /// <returns></returns>
 public static bool CheckValidity(string signature, QiAnyValue[] args)
     => CheckValiditySubroutine(
         signature.Substring(1, signature.Length - 2),
         string.Join("", args.Select(a => a.Signature).ToArray())
         );