J'ai besoin de comparer deux types primitifs (numériques!) (Tous deux encadrés en tant qu'objet) pour trouver le plus grand. Je ne peux pas utiliser de génériques, car je ne reçois que des objets, mais je sais que les valeurs non-boxées sont des nombres primitifs (int, short, long, float etc), donc je peux lancer vers IComparable.Comparaison dynamique des valeurs primitives encadrées
Comment puis-je les comparer? CompareTo() renvoie une erreur car il s'agit de types différents, mais ChangeType peut provoquer une exception OverflowException ...?
public static int Compare(object value1, object value2)
{
//e.g. value1 = (object)(int)1; value2 = (object)(float)2.0f
if (value1 is IComparable && value2 is IComparable)
{
return (value1 as IComparable).CompareTo(value2);
//throws exception bc value1.GetType() != value2.GetType()
}
throw new ArgumentException();
}
Qu'entendez-vous par "le plus grand"? Je veux dire étant donné qu'ils sont tous numériques, je suppose que nous parlons de la comparaison numérique droite? Juste besoin de clarifier – kuskmen
Oui, correct :) merci pour le rappel, j'ai ajouté cette information à la description – Robin