2016-04-03 43 views
8

Questo codice funziona abbastanza bene in C#, nonostante il fatto che int può essere convertito in modo implicito doppia e float:C# La chiamata è ambigua tra le seguenti metodi o proprietà: F (doppio)' e 'F (decimale)'

void Main() 
{ 
    int x = 7; 
    F(x); 
} 
void F(double a) 
{ 
    a.Dump("double"); 
} 
void F(float a) 
{ 
    a.Dump("float"); 
} 

Quindi, perché il codice non viene compilato? (La chiamata è ambigua tra i seguenti metodi o proprietà: 'UserQuery.F (doppio)' e 'UserQuery.F (decimale)')

void Main() 
{ 
    int x = 7; 
    F(x); 
} 
void F(double a) 
{ 
    a.Dump("double"); 
} 
void F(decimal a) 
{ 
    a.Dump("decimal"); 
} 

Ho solo sostituire il float variante della funzione con un decimal variante.

+0

Che aspetto ha la funzione Dump? – jdweng

+0

Questo è equivalente a Console.WriteLine ("qualcosa"). –

+1

puoi aggiornare l'intera classe ?? –

risposta

7

Non ci sono conversioni implicite tra i tipi a virgola mobile e il tipo decimale.

Se esistono metodi con virgola mobile doppia, non c'è alcun problema a determinare un metodo compatibile basato su requisiti minimi di laurea (verrà scelto il metodo float).

Non esiste una regola di questo tipo quando si gestiscono tipi virgola mobile e decimali in quanto non esiste alcuna priorità implicita tra doppio e decimale e deve essere specificata esplicitamente.