Errore del compilatore CS0121
Aggiornamento: novembre 2007
Messaggio di errore
Chiamata ambigua tra i seguenti metodi o proprietà: 'metodo1' e 'metodo2'.
The call is ambiguous between the following methods or properties: 'method1' and 'method2'
A causa della conversione implicita, il compilatore non è riuscito a chiamare un form di un metodo di overload. È possibile risolvere questo errore nei seguenti modi:
Specificando i parametri del metodo in modo da non eseguire la conversione implicita.
Rimuovendo tutti gli overload del metodo.
Eseguendo il cast al tipo appropriato prima di chiamare il metodo.
Esempio
Il seguente codice di esempio genera l'errore 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
}
}
Nell'esempio seguente viene generato l'errore CS0121 in Microsoft Visual Studio 2008, ma non in 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();
}
}