2016-04-03 4 views
8

Dieser Code recht gut in C#, trotz der Tatsache arbeitet, dass int implizit in Doppel umgewandelt werden und Schwimmer:C# Der Aufruf ist nicht eindeutig zwischen den folgenden Methoden oder Eigenschaften: F (double)‘und‚F (dezimal)‘

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

Also, warum dieser Code nicht kompiliert? (Der Anruf ist nicht eindeutig zwischen den folgenden Methoden oder Eigenschaften: ‚UserQuery.F (double)‘ und ‚UserQuery.F (dezimal)‘)

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

Alles, was ich tat, war mit einer der float Variante der Funktion ersetzen decimal Variante.

+0

Wie sieht die Dump-Funktion aus? – jdweng

+0

Dies entspricht Console.WriteLine ("etwas"). –

+1

können Sie die ganze Klasse aktualisieren? –

Antwort

7

Es gibt keine impliziten Konvertierungen zwischen Fließkommatypen und dem Dezimaltyp.

Wenn es Methoden mit Float, Doppel-Signaturen gibt, ist es kein Problem, eine kompatible Methode basierend auf einer Mindestabstufung zu bestimmen (die Float-Methode wird gewählt).

Es gibt keine solche Regel, wenn es sich um Float-Point-Typen und Dezimalzahlen handelt, da es keine implizite Priorität zwischen double und decimal gibt und explizit angegeben werden muss.

Verwandte Themen