Conversion
Conversion de nombre
Types numériques :
Entier :
byte,int16,int/int32,int64Flottant :
float/double(64b),single(32b),decimalAutres :
char,enum
Conversion entre eux explicite → Fonction de même nom que le type cible
let x = 1 // val x : int = 1
let y = float x // val y : float = 1.0
let z = decimal 1.2 // val z : decimal = 1.2M
let s = char 160 // val s : char = ' 'Conversion entre nombre et enum
Il faut utiliser le nom de l'enum pour convertir un nombre en enum :
Soit en paramètre générique de la fonction
enum<my-enum>①Soit par annotation de type et la fonction
enumsans paramètre générique ②
L'opération inverse utilise la fonction int ③
type Color =
| Red = 1
| Green = 2
| Blue = 3
let color1 = enum<Color> 1 // (1) val color1 : Color = Red
let color2 : Color = enum 2 // (2) val color2 : Color = Green
let value3 = int Color.Blue // (3) val c1 : int = 3Casting d'objets
→ S'utilise pour un objet dont le type appartient à une hiérarchie
Upcast
Vers type de base
✅ Oui
:>
upcast
Downcast
Vers type dérivé
❌ Non (*)
:?>
downcast
Test de type
Dans pattern matching
✅ Oui
:?
(*) Le downcast peut échouer → risque de InvalidCastException au runtime ⚠️
Upcasting d'objets
En C♯ : upcast peut généralement être implicite
En F♯ : upcast peut parfois être implicite mais en général doit être explicite, avec opérateur :>
☝️ Règles élargies/assouplies en F♯ 6
→ Exemple : upcast implicite de int list vers int seq
Casting d'objets - Exemple
Test de type
L'opérateur :? réalise un test de type et renvoie un booléen.
☝️ Il faut boxer un nombre pour tester son type :
💡 box x ≃ x :> obj
Mis à jour
Ce contenu vous a-t-il été utile ?