コンパイラ エラー CS0121

更新 : 2007 年 11 月

エラー メッセージ

次のメソッドまたはプロパティ間の呼び出しがあいまいです : 'method1' と 'method2'

暗黙の型変換が行われたため、コンパイラではオーバーロードされたメソッドの一方の形式を呼び出すことができませんでした。このエラーは以下の方法で解決できます。

  • 暗黙の変換が行われないような方法でメソッド パラメータを指定します。

  • メソッドのオーバーロードをすべて削除します。

  • メソッドを呼び出す前に適切な型にキャストします。

使用例

次の例では CS0121 エラーが生成されます。

// CS0121.cs
public class C
{
   void f(int i, double d) 
   {
   }

   void f(double d, int i)
   {
   }

   public static void Main()
   {
      C c = new C();

      c.f(1, 1);   // CS0121
      // try the following line instead
      // c.f(1, 1.0);
      // or
      // c.f(1.0, 1);
      // or
      // c.f(1, (double)1);   // cast and specify which method to call
   }
}

次のコードは、Microsoft Visual Studio 2008 では CS0121 を生成しますが、Visual Studio 2005 では生成しません。

    //CS0121_2.cs
    class Program2
    {

        static int ol_invoked = 0;

        delegate int D1(int x);
        delegate T D1<T>(T x);
        delegate T D1<T, U>(U u);

        static void F(D1 d1) { ol_invoked = 1; }
        static void F<T>(D1<T> d1t) { ol_invoked = 2; }
        static void F<T, U>(D1<T, U> d1t) { ol_invoked = 3; }

        static int Test001()
        {
            F(delegate(int x) { return 1; }); //CS0121
            if (ol_invoked == 1)
                return 0;
            else
                return 1;
        }

        static int Main()
        {
            return Test001();
        }
    }