Frage

ich in einem anderen Beitrag bemerkt, jemand so etwas getan hatte:

double d = 3.1415;
int i = Convert.ToInt32(Math.Floor(d));

Warum haben sie verwenden die Funktion convert statt:

double d = 3.1415;
int i = (int)d;

, die einen impliziten Boden hat und konvertieren.

Auch mehr Besorgnis erregend, bemerkte ich in einigen Produktionscode las ich:

double d = 3.1415;
float f = Convert.ToSingle(d);

Ist das das gleiche wie:

float f = (float)d;

Sind alle diese sonst impliziten Konvertierungen nur in der Convert-Klasse für die Vollständigkeit, oder dienen sie einen Zweck? Ich kann ein Bedürfnis nach .ToString () verstehen, aber nicht den Rest.

War es hilfreich?

Lösung

Casting zu int ist implizites Abschneiden, nicht implizit Boden:

double d = -3.14;
int i = (int)d;
// i == -3

ich wählen Math.Floor oder Math.Round zu meinen Absichten deutlicher zu machen.

Andere Tipps

Gerundet wird auch unterschiedlich gehandhabt:

x = -2,5 (int) x = -2 Convert.ToInt32 (x) = - 2
x = -1,5 (int) x = -1 Convert.ToInt32 (x) = - 2
x = -0,5 (int) x = 0 Convert.ToInt32 (x) = 0
x = 0,5 (int) x = 0 Convert.ToInt32 (x) = 0
x = 1,5 (int) x = 1 Convert.ToInt32 (x) = 2
x = 2,5 (int) x = 2 Convert.ToInt32 (x) = 2

Beachten Sie die x = -1,5 und x = 1,5 Fälle.
In einigen Algorithmen verwendete Rundungsmethode ist entscheidend für die richtige Antwort zu bekommen.

Sie können Convert verwenden, wenn Sie eine Zeichenfolge, die Sie in einen int umwandeln möchten

int i = Convert.ToInt32("1234");

Konvertieren und Gießen wird sowohl eine Ausnahme auslösen, wenn sie versagen.

das heißt, das wird noch eine Ausnahme auslösen, wird es nicht wieder 0:

Convert.ToInt32("1234NonNumber");

In vielen Fällen konvertieren und Gießen wird das gleiche Ergebnis, aber ein gegossenes ist oft leichter zu lesen.

Convert.ToInt32 () auf Strings ( http: // msdn .microsoft.com / en-us / library / sf1aw27b.aspx ), während Gießen nur auf Typen verwendet werden können, die internen Wandler (numerische Typen) haben. Der eigentliche Trick kommt bei der Entscheidung zwischen Int32.Parse und Convert.ToInt32 (). Convert.ToInt32 () ist tolerant von einem Null-Parametern und gibt 0, während Int32.Parse () ein Argument werfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top