Puis-je convertir long en int?

Je veux convertir long en int .

Si la valeur de long > int.MaxValue , je suis heureux de le laisser int.MaxValue .

Quel est le meilleur moyen?

(int)myLongValue juste (int)myLongValue . Il fera exactement ce que vous voulez (en supprimant les MSB et en prenant les LSB) dans un contexte unchecked (qui est la valeur par défaut du compilateur). Il jettera OverflowException dans le contexte checked si la valeur ne rentre pas dans un int :

 int myIntValue = unchecked((int)myLongValue); 
 Convert.ToInt32(myValue); 

Bien que je ne sache pas ce qu’il fera quand il sera plus grand que int.MaxValue.

Parfois, vous n’êtes pas réellement intéressé par la valeur réelle, mais par son utilisation comme sum de contrôle / hashcode . Dans ce cas, la méthode intégrée GetHashCode() est un bon choix:

 int checkSumAsInt32 = checkSumAsIn64.GetHashCode(); 

Le moyen le plus sûr et le plus rapide consiste à utiliser le masquage de bits avant de lancer …

 int MyInt = (int) ( MyLong & 0xFFFFFFFF ) 

La valeur Bit Mask ( 0xFFFFFFFF ) dépendra de la taille de Int car la taille Int dépend de la machine.