Question

J'ai remarqué dans un autre post, quelqu'un avait fait quelque chose comme:

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

Pourquoi ont-ils utilisé la fonction convert plutôt que:

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

qui a un plancher implicite et converti.

En outre, plus préoccupant, j'ai remarqué que dans certains codes de production, je lisais:

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

Est-ce la même chose que:

float f = (float)d;

Toutes ces conversions implicites par ailleurs sont-elles uniquement dans la classe Convert par souci d'exhaustivité ou servent-elles à quoi que ce soit? Je peux comprendre la nécessité de .ToString (), mais pas du reste.

Était-ce utile?

La solution

La conversion en int correspond à une troncature implicite et non à un sol:

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

J'ai choisi Math.Floor ou Math.Round pour rendre mes intentions plus explicites.

Autres conseils

L’arrondi est également traité différemment:

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

Notez les cas x = -1.5 et x = 1.5.
Dans certains algorithmes, la méthode d’arrondi utilisée est essentielle pour obtenir la bonne réponse.

Vous pouvez utiliser la conversion lorsque vous souhaitez convertir une chaîne en un entier

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

Les conversions et les conversions génèrent une exception si elles échouent.

c.-à-d. que cela jettera toujours une exception, il ne retournera pas 0:

Convert.ToInt32("1234NonNumber");

Dans de nombreux cas, les conversions et les conversions auront le même résultat, mais elles sont souvent plus faciles à lire.

Convert.ToInt32 () est utilisé sur les chaînes ( http: // msdn .microsoft.com / fr-us / library / sf1aw27b.aspx ) lors du casting ne peut être utilisé que sur des types dotés de convertisseurs internes (types numériques). Le vrai truc consiste à choisir entre Int32.Parse et Convert.ToInt32 (). Convert.ToInt32 () tolère un paramètre null et renvoie 0 tandis qu'Int32.Parse () lève une exception ArgumentNullException.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top