コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【C#】AmbiguousMatchException: Ambiguous match found.

はじめに

private static string GetParam( Hoge hoge )
{
    ...
}

private static string GetParam( Fuga fuga )
{
    ...
}

例えば上記のように、引数が違う同名の関数がオーバーロードされており、

var attr   = BindingFlags.Static | BindingFlags.NonPublic;
var method = type.GetMethod( "GetParam", attr );

このようなリフレクションのコードで関数の情報を取得しようとすると

AmbiguousMatchException: Ambiguous match found.

引数が違う同名の関数のどちらの情報を取得すれば良いのかわからないため、
上記のエラーが発生します

解決方法

var attr    = BindingFlags.Static | BindingFlags.NonPublic;
var methods = type.GetMethods( attr );
var method  = methods.FirstOrDefault( c => 
{
    return 
        // 関数の名前が GetParam で
        c.Name == "GetParam" && 
        // 第1引数の型が Hoge の関数
        c.GetParameters()[ 0 ].ParameterType == typeof( Hoge );
} );

上記のように、GetMethods ですべての関数の情報を取得してから
条件に合う関数を見つけるコードを書くことで、エラーを回避できます

参考サイト様